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



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

当我读到这篇文章的解决方案/答案时:scope_identity vs identit_current

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

但是使用Select Scope_Identity();会返回NULL,而Select IDENT_CURRENT('tableName')会返回我在SQLServerManagementStudio中检查过的正确id。

我在SqlTransaction中执行的插入语句。Select IDENT_CURRENT('tableName')在事务之后完成。

我做错了什么?

更新

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

INSERT INTO TEST (NAME) VALUES (@Name)

命令的Parameter集合的值为"xxx",所有内容都可以很好地插入到表中。

我不使用存储过程,只使用带有C#的纯SqlDataReader

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

我如何获得运行上述语句的最后一个auto-inc-id?我应该为上述语句调用ExecuteNonQueryExecuteReader,因为它有一个令人困惑的INSERTSELECT。。。

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

@@IDENTITY返回为当前会话中所有作用域中的任何表生成的最后一个标识值。

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

只需使用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)

相关内容

  • 没有找到相关文章

最新更新