35

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

 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

Wikipedia 说要使用 SQL Server 2008OUTPUT而不是RETURNING,可以使用类似的东西OUTPUT p_key

4

5 回答 5

47

如果您要插入一整组行,则选择SCOPE_IDENTITY()不会。而且SCOPE_IDENTITY也只适用于(数字)身份列 - 有时你的 PK 是别的东西......

但是 SQL Server确实有该OUTPUT子句 -它在 MSDN 上有很好的记录!

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

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

于 2012-08-22T20:35:21.873 回答
14

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

declare @id int 
insert yourtable values (some, values)
select @id = Scope_Identity()
于 2012-08-22T19:46:30.943 回答
5

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

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

然后,而不是executeNonQuery使用executeScalar.

这应该够了吧!

于 2012-08-22T19:48:49.893 回答
1

执行插入后,查询:

select scope_identity()

检索最后插入的主键。

于 2012-08-22T19:47:29.073 回答
0

使用 @@IDENTITY 可以获取最后生成的主键

Insert into TableName (Name,Class) values('ABC','pqr')
select @@IDENTITY
于 2019-12-09T15:03:30.120 回答