SCOPE_IDENTITY()
函數返回當前範圍中插入的最後一個標識值。您在EXEC sp_executesql
中執行的動態查詢在當前範圍內爲而不是。您需要在動態查詢中調用SCOPE_IDENTITY()
或使用其他方法來實現所需的結果。
下面是你可以使用SCOPE_IDENTITY()
:
DECLARE @ID int;
EXEC sp_executesql N'
INSERT INTO …;
SET @ID = SCOPE_IDENTITY();
', N'@ID int OUTPUT', @ID OUTPUT;
RETURN @ID;
或者你可以嘗試以下方法:
DECLARE @LastID TABLE (ID int);
INSERT INTO @LastID (ID)
EXEC sp_executesql N'
INSERT INTO …;
SELECT SCOPE_IDENTITY();
';
RETURN (SELECT TOP 1 ID FROM @LastID);
如果你的SQL Server 2005 +,你可以修改上面的方法來使用OUTPUT
子句INSERT
而不是SELECT SCOPE_IDENTITY()
。
我們需要確認代碼,但它聽起來像是在嘗試訪問'SCOPE_IDENTITY()'之前的最後一個語句不是插入到具有'IDENTITY'列的表中。 –
輸出參數與返回值不同。 – podiluska