the*_*ist 4 sql t-sql sql-server
我有存储过程,@dbName在该DB 中获取并插入记录.我想获取最后插入记录的id.SCOPE_IDENTITY()返回NULL并@@IDENTITY返回正确的id,为什么会发生?正如我所读到的,所以最好SCOPE_IDENTITY()在桌面上有一些触发器的情况下使用.我可以用IDENT_CURRENT吗?无论触发器是什么,它是否返回表范围内的id?
那么问题是什么以及使用什么?
EDITED
DECALRE @dbName nvarchar(50) = 'Site'
DECLARE @newId int
DECLARE @sql nvarchar(max)
SET @sql = N'INSERT INTO ' + quotename(@dbName) + N'..myTbl(IsDefault) ' +
N'VALUES(0)'
EXEC sp_executesql @sql
SET @newId = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
And*_*mar 12
就像Oded所说,问题是你在执行之前要求身份insert.
作为解决方案,最好scope_identity尽可能接近尽可能地运行insert.通过使用sp_executesql输出参数,您可以scope_identity作为动态SQL语句的一部分运行:
SET @sql = N'INSERT INTO ' + quotename(@dbName) + N'..myTbl(IsDefault) ' +
N'VALUES(0) ' +
N'SET @newId = SCOPE_IDENTITY()'
EXEC sp_executesql @sql, N'@newId int output', @newId output
Run Code Online (Sandbox Code Playgroud)
这是SE数据的一个例子,显示scope_identity应该在里面sp_executesql.
| 归档时间: |
|
| 查看次数: |
7471 次 |
| 最近记录: |