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和我应该打电话ExecuteNonQuery或ExecuteReader为上述,因为它有一个INSERT和SELECT这混乱...
小智 17
IDENT_CURRENT 返回在任何会话和任何范围内为特定表生成的最后一个标识值.
@@IDENTITY 返回在所有范围内为当前会话中的任何表生成的最后一个标识值.
SCOPE_IDENTITY 返回为当前会话中的任何表和当前范围生成的最后一个标识值.
只需使用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)
| 归档时间: |
|
| 查看次数: |
29241 次 |
| 最近记录: |