1

2 つの挿入ステートメントを持つストアド プロシージャがあります。最初の挿入から ID を返したいと思います。大まかに次のようになります。

declare @retVal int
Begin transaction

insert into myTable(..) values (..)

set @retVal = scope_identity()

insert into myTable2(..) values(..)

Commit transaction

return @retVal

これを行うと、insert ステートメントは正常に機能しますが、毎回同じ値が返されます (この場合、myTable奇妙な理由で から ID 6 が返されます)。

何が起こっているのか誰にも推測できますか?

4

1 に答える 1

6

パラメータを使用してOUTPUTください。RETURNデータではなく、ステータス/エラーコードを返すためのものです。たとえば、RETURNハンドルのみINT。十分ではなかっBIGINTたためにテーブルを使用するように変更するとどうなるでしょうか?INT

ALTER PROCEDURE dbo.YourProcedure
  @params VARCHAR(32),
  @Table1ID INT = NULL OUTPUT
AS
BEGIN
  SET NOCOUNT ON;

  BEGIN TRANSACTION;

  INSERT dbo.Table1...
  SET @Table1ID = SCOPE_IDENTITY();
  INSERT dbo.Table2...

  COMMIT TRANSACTION;
END
GO
于 2013-03-07T18:47:38.110 に答える