我正在一个表中插入一行,然后想要获取该新 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 )的任何原因? ——蒂姆
From 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)