Допустим, у меня есть хранимая процедура с этим в его теле:
EXEC 'INSERT INTO ' + quotename(@table) ' blah...'
SELECT IDENT_CURRENT('' + @table + '')
Гарантируется ли IDENT_CURRENT () получение идентификатора этой строки, вставленной в EXEC? IDENT_CURRENT () «возвращает последнее значение идентификатора, сгенерированное для конкретной таблицы в любом сеансе и любой области», но область внутри EXEC отличается от хранимой процедуры, верно?
Я хочу убедиться, что если хранимая процедура вызывается несколько раз за раз, правильный идентификатор будет выбран.
РЕДАКТИРОВАТЬ: Или мне нужно сделать INSERT и SELECT в EXEC, например, так:
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
EXEC @insert
И если это так, как ВЫБРАТЬ результат EXEC, если я хочу продолжить с большим количеством кода в T-SQL? Вот так (хотя это явно не правильно):
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 (), NULL возвращается SELECT. (