doutu6658 2018-09-14 09:52
浏览 217
已采纳

如何执行插入查询,其中参数数据来自选择查询的结果集

I am trying to fetch data from one database(db) which is in a different server and insert the fetched data to another database(db1) in a different server. So far I am able to select data from db but could not insert it into db1. I am getting Null values in the database. Any help would be appreciated.

My code snippet is below:

func searchHandler(w http.ResponseWriter, r *http.Request) {
dsn := "server=*****.ecc4q.****.com; user id=******; password=***************"
db, err := sql.Open("mssql", dsn) 
if err != nil {
    log.Fatal(err)
}
err = db.Ping()
if err != nil {
    log.Fatal(err)
}


rows, err := db.Query("select Incident_Number, Last_Resolved_Date, Corporate_ID from ITSM.dbo.HPD_Help_Desk_Classic")
if err != nil {
    log.Println(err)
}
defer db.Close()

dsn1 := "server=******.md3q.***.com;user id=*****;password=********"
db1, err := sql.Open("mssql", dsn1) 
if err != nil {
    log.Fatal(err)
}
err = db1.Ping()
if err != nil {
    log.Fatal(err)
}

for rows.Next() {
    err := rows.Scan(&Incident_Number, &Last_Resolved_Date, &Corporate_ID)
        if err != nil {
            log.Fatal(err)
        }

    stmt1, err := db1.Prepare("INSERT INTO mdesk.dbo.tbl_tcktinfo(TicketNumber, ResolvedDate, CDSID) VALUES(?,?,?)")
        if err != nil {
            log.Println(err)
        }

    res, err := stmt1.Exec(TicketNumber, ResolvedDate, CDSID)
        if err != nil {
            log.Println(err)
        }
    log.Println(Incident_Number, Last_Resolved_Date, Corporate_ID)
}
defer db1.Close() 

}

  • 写回答

2条回答 默认 最新

  • dongyuanguang3893 2018-09-14 10:02
    关注

    You scan records into Incident_Number, Last_Resolved_Date, Corporate_ID from rows like:

    err := rows.Scan(&Incident_Number, &Last_Resolved_Date, &Corporate_ID)
    

    But you pass different argument in Exec() function. You have to pass scaned variables to insert records into different database table.

    stmt1, err := db1.Prepare("INSERT INTO mdesk.dbo.tbl_tcktinfo(TicketNumber, ResolvedDate, CDSID) VALUES(?,?,?)")
    if err != nil {
        log.Fatal(err)
    }
    defer stmt1.Close() // always clean up after yourself, preferably return errors here, too
    
    for rows.Next() {
        err := rows.Scan(&Incident_Number, &Last_Resolved_Date, &Corporate_ID)
            if err != nil {
                log.Fatal(err)
            }
    
    
        res, err := stmt1.Exec(Incident_Number, Last_Resolved_Date, Corporate_ID)
            if err != nil {
                log.Println(err)
            }
        log.Println(Incident_Number, Last_Resolved_Date, Corporate_ID)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名