IDENT_CURRENT返回最后一个标识值,但SCOPE_IDENTITY不返回

Pas*_*cal 3 sql-server scope-identity

我有一个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语句由基类动态构建:

INSERT INTO TEST (NAME) VALUES (@Name)
Run Code Online (Sandbox Code Playgroud)

命令的参数集合的值为"xxx",并且所有内容都可以很好地插入到表中.

我不使用纯粹SqlDataReader的C#存储过程.

commandText = "INSERT INTO TEST (NAME) VALUES ('Test1');Select Scopy_Identity();"
Run Code Online (Sandbox Code Playgroud)

我怎样才能运行上面的语句中的最后自动INC ID和我应该打电话ExecuteNonQueryExecuteReader为上述,因为它有一个INSERTSELECT这混乱...

小智 17

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

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

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


KM.*_*KM. 5

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

INSERT INTO TEST (NAME) OUTPUT INSERTED.YourIdentity VALUES (@Name)
Run Code Online (Sandbox Code Playgroud)

工作实例:

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

INSERT INTO @YourTable (YourCol1) OUTPUT INSERTED.YourIdentity VALUES ('ABC')
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

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

(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)