[英]Getting the primary key for an inserted value
我有一个简单的表有2列 - 名称和主键,ID。 当我插入一个值时,我希望能够在我的代码中立即检索该值。
所以我有 :
db.Execute("INSERT INTO table(name) VALUES (@0)",name);
不会自动填充id列并存储行。
那我怎么能db.Query();
当名称不唯一时,此值是多少? 这可能吗?
一个有趣的问题,我认为:)
您可以使用@@IDENTITY
向插件添加一个返回@@IDENTITY
:
INSERT INTO table(name) VALUES (@0); SELECT @@IDENTITY;
更新:如注释中所述,因为@@IDENTITY
全局工作,您应该实际使用SCOPE_IDENTITY()
来限制当前范围:
INSERT INTO table(name) VALUES (@0); SELECT SCOPE_IDENTITY();
然后,您可以通过使用ExecuteScalar()
执行插入并获取结果来检索主键/标识。
你会想要使用SCOPE_IDENTITY()
一些不寻常的情况。 就像是:
INSERT INTO table(name) VALUES (@0); SELECT Scope_Identity();
为什么不@@ identity? 因为在许多场景中它可能是错误的。 MSDN文档将其描述为:
@@ IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT是类似的函数,因为它们返回插入表的IDENTITY列的最后一个值。
@@ IDENTITY和SCOPE_IDENTITY将返回当前会话中任何表中生成的最后一个标识值。 但是,SCOPE_IDENTITY仅在当前范围内返回值; @@ IDENTITY不限于特定范围。
使用db.ExecuteScalar
并在SQL语句末尾添加SELECT SCOPE_IDENTITY()
以检索主键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.