繁体   English   中英

获取插入值的主键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM