假设我的主体中有一个存储过程:
EXEC 'INSERT INTO ' + quotename(@table) ' blah...'
SELECT IDENT_CURRENT('' + @table + '')
IDENT_CURRENT() 是否保证在 EXEC 中获得插入该行的标识?IDENT_CURRENT() “返回在任何会话和任何范围内为特定表生成的最后一个标识值”,但 EXEC 中的范围与存储过程不同,对吧?
我想确保如果一次多次调用存储过程,则选择正确的标识。
编辑:或者我是否需要在 EXEC 中同时执行 INSERT 和 SELECT,如下所示:
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
EXEC @insert
如果是这种情况,如果我想继续使用 T-SQL 中的更多代码,我该如何选择 EXEC 的结果?像这样(虽然它显然是不正确的):
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
declare @ident int
set @ident = EXEC @insert
-- more code
SELECT * FROM blah
更新:在第一个片段中,如果我选择 SCOPE_IDENTITY() 而不是使用 IDENT_CURRENT(),则 SELECT 将返回 NULL。:(