1

execute sp_executesqlspで挿入クエリを実行するために使用しています。クエリが実行され、挿入が適切に行われます。その後、私は を使用していscope indentity()ます。値は 1 つの出力パラメーターに設定されます。しかし、私はエラーが発生しています:

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()挿入された最後のID値を返します。実行している動的クエリは現在のスコープにありません。目的の結果を得るには、動的クエリを呼び出すか、別のメソッドを使用する必要があります。EXEC sp_executesqlSCOPE_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句を使用できます。INSERTSELECT SCOPE_IDENTITY()

于 2012-06-26T11:52:38.673 に答える