Как говорит Одед, проблема в том, что вы запрашиваете личность, прежде чем выполнить 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
Вот пример в SE Data , показывающий, что scope_identity
должен быть внутри sp_executesql
.