QA@IT
«質問へ戻る

質問を投稿

ストアドの戻り値について

C#からストアドを呼び出し、ストアドの実行結果をOUTPUTにて戻すようにしているのですが
テーブルロックをかけるとOUTPUTの変数に値を入れても呼出元に戻りません。
(ストアド上で@RetIDを見ると値が入っているが、C#側ではNullとなっている。)

環境
VisualStudio2008 C#
SQLServer2008

ストアドサンプルコード

CREATE PROCEDURE Proce_GetID
    @tempID INT
    ,@RetID INT OUTPUT
AS
BEGIN
    BEGIN TRY
        BEGIN TRANSACTION

        --テーブルロック。コメントアウトすると正常に動く。
        SELECT *  FROM TABLE_A WITH (TABLOCKX)

        -- テーブルロックしていても@RetIDに値は入っています。
        SELECT @RetID = UserID FROM TABLE_A WHERE TempID = @tempID

        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION
    END CATCH
END

OUTPUTで値が戻らない原因をご存知の方いらっしゃいますでしょうか?

C#からストアドを呼び出し、ストアドの実行結果をOUTPUTにて戻すようにしているのですが
テーブルロックをかけるとOUTPUTの変数に値を入れても呼出元に戻りません。
(ストアド上で@RetIDを見ると値が入っているが、C#側ではNullとなっている。)

環境
VisualStudio2008 C#
SQLServer2008

ストアドサンプルコード
``` 
CREATE PROCEDURE Proce_GetID
    @tempID INT
    ,@RetID INT OUTPUT
AS
BEGIN
    BEGIN TRY
        BEGIN TRANSACTION
 
        --テーブルロック。コメントアウトすると正常に動く。
        SELECT *  FROM TABLE_A WITH (TABLOCKX)
 
        -- テーブルロックしていても@RetIDに値は入っています。
        SELECT @RetID = UserID FROM TABLE_A WHERE TempID = @tempID
 
        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION
    END CATCH
END
```
OUTPUTで値が戻らない原因をご存知の方いらっしゃいますでしょうか?