过程尝试返回NULL状态,这是不允许的。将返回状态0

时间:2012-06-26 08:16:27

标签: sql sql-server tsql

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

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

1 个答案:

答案 0 :(得分: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的{​​{1}}子句代替INSERT