一尘不染

如何从SQLServer SELECT语句返回新的IDENTITY列值?

sql

我要插入具有自动递增键字段的SQLServer表。(我相信这在SQLServer中称为IDENTITY列。)

在Oracle中,我可以使用RETURNING关键字为INSERT语句提供一个类似于SELECT查询的结果集,该结果集将返回生成的值:

INSERT INTO table
(foreign_key1, value)
VALUES
(9, 'text')
RETURNING key_field INTO :var;

如何在SQLServer中完成此操作?

奖励 :好的,到目前为止,很好的答案,但是,如果可能的话,如何将其放入单个语句中?:)


阅读 155

收藏
2021-03-10

共1个答案

一尘不染

通常,它不能在单个语句中完成。

但是SELECT SCOPE_IDENTITY()可以(并且应该)直接放在INSERT语句之后,因此所有操作都在同一数据库调用中完成。

例子:

mydb.ExecuteSql("INSERT INTO table(foreign_key1, value) VALUES(9, 'text'); SELECT SCOPE_IDENTITY();");

您可以使用OUTPUT,但是您应该注意一些限制:

http://msdn.microsoft.com/en-
us/library/ms177564.aspx

2021-03-10