获取SQL Server 2008中新插入的行的主键

时间:2012-08-22 19:45:05

标签: sql-server database

我有一堆数据会插入到表格中。这个问题是我需要它将主键返回到该表。我不确定是否有类似的事情:

 insert into TABLE (...) values (...) RETURNING p_key

 select p_key from (insert into TABLE (...) values (...))

我正在为浏览器制作一个解决方法并保存信息,这些信息会或多或少地添加一行然后更新它......但是没有主键,就没有办法更新它,因为没有引用它。

我在线查找并通过谷歌找到了一些例子,但是我对这些例子略有不满。

http://en.wikipedia.org/wiki/Insert_(SQL)#Retrieving_the_key

http://www.daniweb.com/web-development/databases/ms-sql/threads/299356/returning-identity-of-last-inserted-row-uniqueidentifier

维基百科说,对于SQL Server 2008使用OUTPUT而不是RETURNING,可以使用类似OUTPUT p_key

的内容

5 个答案:

答案 0 :(得分:31)

如果您要插入一整行行,则选择SCOPE_IDENTITY()将不会。并且SCOPE_IDENTITY也仅适用于(数字)标识列 - 有时您的PK是其他内容......

但是SQL Server 确实OUTPUT子句 - and it's very well documented on MSDN!

INSERT INTO dbo.Table(columns)
OUTPUT INSERTED.p_key, INSERTED.someothercolumnhere .......
VALUES(...) 

这些值将“回显”回调用应用,例如您将在SQL Server Management Studio的网格中看到它们,或者您可以从C#或VB.NET中将它们作为结果集读取,并调用此INSERT语句。

答案 1 :(得分:10)

Scope_Identity()是你想要的,假设“主键”是指“身份”

declare @id int 
insert yourtable values (some, values)
select @id = Scope_Identity()

答案 2 :(得分:4)

C#中,在您的SQL语句写入SELECT SCOPE_IDENTITY();之后,您的代码将是:

insert into TABLE (...) values (...); SELECT SCOPE_IDENTITY();

然后,而不是executeNonQuery使用executeScalar

这应该可以做到!

答案 3 :(得分:1)

执行插入后,查询:

select scope_identity()

检索最后插入的主键。

答案 4 :(得分:0)

使用@@ IDENTITY,您可以获得上一次生成的主键

Insert into TableName (Name,Class) values('ABC','pqr')
select @@IDENTITY