我在一个表中插入一行然后想要获取该新ID,以便我可以将其添加到另一个存储电子邮件地址的变量中。
var db = Database.Open("myDB");
var insertCommand1 = "INSERT INTO myDB (FirstName, LastName) Values(@0, @1)";
db.Execute(insertCommand1, first, last);
var lastInsertedId = db.QueryValue("SELECT SCOPE_IDENTITY()");
var insertCommand2 = "INSERT INTO email (id_person, email) Values(@0, @1)";
db.Execute(insertCommand2, lastInsertId, email);
其中id_person是在我的第一个表中创建的id。当我运行代码时,我得到lastInsertedId = {}。是什么原因导致它没有为我的第一个表抓取id_person的值,这是一个主键,int,而不是null? --Tim
答案 0 :(得分:1)
来自the documentation of SCOPE_IDENTITY(),强调我的:
返回插入同一范围内的标识列的最后一个标识值。范围是一个模块:存储过程,触发器,函数或批处理。 因此,如果两个语句属于同一存储过程,函数或批处理,则它们在同一范围内。
因为您使用两个查询,所以它们被视为两个批次。您需要在单个查询中执行插入和选择。
我不知道你使用的是什么库,所以我只是猜测语法,但我相信你需要像
这样的东西 var db = Database.Open("myDB");
var insertCommand1 = "INSERT INTO myDB (FirstName, LastName) Values(@0, @1); " +
"SELECT SCOPE_IDENTITY()";
var lastInsertedId = db.QueryValue(insertCommand1, first, last);
var insertCommand2 = "INSERT INTO email (id_person, email) Values(@0, @1)";
db.Execute(insertCommand2, lastInsertId, email);
答案 1 :(得分:0)
如果数据库在SQL SERVER中,请创建SQL参数并将方向设置为 “输出”。 请检查此链接:
答案 2 :(得分:0)
从 SQL Server 获取 SCOPE_IDENTITY() 值非常容易。我将举一个例子,其中我能够在 c# 标签中打印 SCOPE_IDENTITY() 数据。
new Promise
这里的值 'g' 返回了 scope_identity 值。