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条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大