我正在使用execute sp_executesql
在 sp 中执行插入查询。查询已执行,插入正确发生。在我使用之后scope indentity()
,值被设置为一个输出参数。但我收到错误:
procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead.
如何解决?有人有想法吗?
我正在使用execute sp_executesql
在 sp 中执行插入查询。查询已执行,插入正确发生。在我使用之后scope indentity()
,值被设置为一个输出参数。但我收到错误:
procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead.
如何解决?有人有想法吗?
该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
子句 ofINSERT
而不是SELECT SCOPE_IDENTITY()
.