1

我正在使用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.

如何解决?有人有想法吗?

4

1 回答 1

1

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().

于 2012-06-26T11:52:38.673 回答