我有一堆数据会插入到表格中。这个问题是我需要它将主键返回到该表。我不确定是否有类似的事情:
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
维基百科说,对于SQL Server 2008使用OUTPUT
而不是RETURNING
,可以使用类似OUTPUT p_key
答案 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