获取插入值的主键

时间:2012-03-20 22:13:14

标签: c# sql sql-server

我有一个包含2列的简单表 - name和主键id。当我插入一个值时,我希望能够在我的代码中立即检索该值。

所以我有:

db.Execute("INSERT INTO table(name) VALUES (@0)",name);

不会自动填充id列并存储行。

那么当名称不唯一时,我怎样才能db.Query();获取此值?这可能吗?

一个有趣的问题,我认为:)

3 个答案:

答案 0 :(得分:7)

您可以使用@@IDENTITY

为插件添加一个返回标识的部件
INSERT INTO table(name) VALUES (@0); SELECT @@IDENTITY;

更新:正如评论中所述,@@IDENTITY在全球范围内有效,您实际应该使用SCOPE_IDENTITY()来限制当前范围:

INSERT INTO table(name) VALUES (@0); SELECT SCOPE_IDENTITY();

然后,您可以通过使用ExecuteScalar()执行插入并获取结果来检索主键/标识。

答案 1 :(得分:3)

你会想要SCOPE_IDENTITY()使用某些不寻常的情况。类似的东西:

INSERT INTO table(name) VALUES (@0); SELECT Scope_Identity();

为什么不是@@ identity?因为在许多场景中它可能是错误的。 MSDN docs describe它为:

  

@@ IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT是类似的功能   他们返回插入到IDENTITY列中的最后一个值   表

     

@@ IDENTITY和SCOPE_IDENTITY将返回最后一个标识值   在当前会话的任何表中生成。但是,SCOPE_IDENTITY   仅在当前范围内返回值; @@ IDENTITY不是   仅限于特定范围。

答案 2 :(得分:1)

使用db.ExecuteScalar并在SQL语句末尾添加SELECT SCOPE_IDENTITY()以检索主键。