我收集到 SQL Server
不会自动返回上次插入的 ID,我需要手动执行此操作:OUTPUT INSERTED.ID
在 SQL insert
内声明。
我以后如何在 Go code
中取货? ?
有问题的功能是:
func (sta *state) mkLogEntry(from time.Time, to time.Time, man bool) (id int64) {
qry := "INSERT INTO ROMEExportLog(FromDate,ToDate,ExecutedAt,ExecutedManually,ExportWasSuccessful,UpdatedDaysIrregular) OUTPUT INSERTED.ID " +
"VALUES(@FromDate,@ToDate,@ExecutedAt,@ExecutedManually,@ExportWasSuccessful,@UpdatedDaysIrregular)"
res, err := sta.db.Exec(qry,
sql.Named("FromDate", from),
sql.Named("ToDate", to),
sql.Named("ExecutedAt", time.Now()),
sql.Named("ExecutedManually", man),
sql.Named("ExportWasSuccessful", false),
sql.Named("UpdatedDaysIrregular", false),
)
if err != nil {
log.Fatal(err)
}
id, err = res.LastInsertId()
if err != nil {
log.Fatal(err)
}
return
}
res.LastInsertId()
返回 There is no generated identity value
.
最佳答案
对于 SQL 服务器:
这可能是噱头......但我发现使用 QueryRow
将运行多个 查询/命令并只返回LAST 行。
if err := db.QueryRow(`
INSERT INTO [TABLE] ([COLUMN]) VALUES (?);
SELECT SCOPE_IDENTITY()`,
colValue
).Scan(&id); err != nil {
panic(err)
}
只要 SELECT SCOPE_IDENTITY()
是返回的最后一行,那么这基本上完成了我预期的 result.LastInsertId() 要做的事情。
关于sql - 如何使用 GO-MSSQLDB 驱动程序获取最后插入的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001888/