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

Fal*_*per 21 database sql-server

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

 insert into TABLE (...) values (...) RETURNING p_key
Run Code Online (Sandbox Code Playgroud)

要么

 select p_key from (insert into TABLE (...) values (...))
Run Code Online (Sandbox Code Playgroud)

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

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

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

mar*_*c_s 32

如果您要插入一整行行,则选择SCOPE_IDENTITY()不行.并且SCOPE_IDENTITY只适用于(数字)标识列 - 有时你的PK是其他东西......

但SQL Server 确实有这个OUTPUT条款 - 它在MSDN上有很好的文档记录!

INSERT INTO dbo.Table(columns)
OUTPUT INSERTED.p_key, INSERTED.someothercolumnhere .......
VALUES(...) 
Run Code Online (Sandbox Code Playgroud)

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

  • 值得注意的是,如果您要插入的表在插入时有触发器,除非与 INTO 结合使用,否则“OUPUT”将抛出错误。根据文档:“如果在指定 OUTPUT 子句时未指定 INTO 关键字,则 DML 操作的目标不能为给定的 DML 操作定义任何启用的触发器。” (3认同)

pod*_*ska 10

Scope_Identity() 是你想要的,假设"主键"你的意思是"身份"

declare @id int 
insert yourtable values (some, values)
select @id = Scope_Identity()
Run Code Online (Sandbox Code Playgroud)

  • @Fallenreaper - 这些语句需要批量处理。 (2认同)

Chr*_*org 5

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

insert into TABLE (...) values (...); SELECT SCOPE_IDENTITY();
Run Code Online (Sandbox Code Playgroud)

然后,而不是executeNonQuery使用executeScalar.

这应该够了吧!