3

我有一个 SQL Server 作为 asp.net 应用程序的后端。多个人可能会“同时……”在同一个表中插入数据。

当我从这篇文章中阅读解决方案/答案时:scope_identity vs ident_current

那么我不应该使用,Ident_current因为我可以获得另一个用户插入的 id。

但是使用Select Scope_Identity();返回我NULL,而Select IDENT_CURRENT('tableName')返回我使用SQL Server Management Studio检查的正确ID。

我在SqlTransaction. 这Select IDENT_CURRENT('tableName')是在交易之后完成的。

我错了什么?

更新

我的插入语句由基类动态构建在一起:

INSERT INTO TEST (NAME) VALUES (@Name)

该命令的参数集合具有值“xxx”,并且所有内容都可以很好地插入表中。

我不使用纯SqlDataReaderC# 的存储过程。

commandText = "INSERT INTO TEST (NAME) VALUES ('Test1');Select Scopy_Identity();"

我怎样才能获得运行上述语句的最后一个自动 inc id,我应该调用ExecuteNonQuery或调用上述语句ExecuteReader,因为它有一个INSERTSELECT这令人困惑......

4

2 回答 2

19

IDENT_CURRENT返回为任何会话和任何范围内的特定表生成的最后一个标识值。

@@IDENTITY返回在所有范围内为当前会话中的任何表生成的最后一个标识值。

SCOPE_IDENTITY返回为当前会话和当前范围中的任何表生成的最后一个标识值。

于 2012-09-30T12:39:04.987 回答
5

只需使用OUTPUT 子句(Transact-SQL),您就可以插入数据并在同一语句中选择所有(甚至多个)身份:

INSERT INTO TEST (NAME) OUTPUT INSERTED.YourIdentity VALUES (@Name)

工作示例:

DECLARE @YourTable table (YourIdentity int identity(1,1) primary key, YourCol1 varchar(5))

INSERT INTO @YourTable (YourCol1) OUTPUT INSERTED.YourIdentity VALUES ('ABC')

输出:

YourIdentity
------------
1

(1 row(s) affected)
于 2012-02-21T21:39:28.097 回答