SQL ServerのT-SQLでのトランザクション処理で266エラーが発生
SQL Serverのプロシージャで266エラーが発生します。
例)
SQL Serverのプロシージャを現在作成していますが、
初めてのSQL Serverを触るため現状上手くいっていません。
作成したいプロシージャとしては、
他のプロシージャでも使用する共通のプロシージャを呼び出して処理していきたいです。
共通のプロシージャからエラーの場合はRETURNで1が帰り、
@ERR_MSGに共通プロシージャからエラーメッセージが来ます。(ここまでは確認済みです)
TRANSACTIONの途中で、共通プロシージャを使用した処理で、エラー(RETURN 1)が発生した場合、
エラーが発生してた時点より前で処理をした、共通プロシージャの処理を含めてロールバックしたいです。
(エラーより上の処理をCOMMITしたくないです。)
その後@ERR_MSGのエラー内容をPRINTしたいです。
しかし、下記のようなプロシージャ作成したのですが、266エラーが発生しました。
発生している問題・エラー
EXECUTE 後のトランザクション数は、BEGIN ステートメントと COMMIT ステートメントの数が一致していないことを示しています。以前の数 = 1、現在の数 = 0。
上記のようなエラーが現状発生しています。
作成したプロシージャ(t-sql)
CREATE PROCEDURE T_SQL1
-- 画面から値を取得
@p0 NVARCHAR(10), -- 値0
@p1 NVARCHAR(10), -- 値1
AS
BEGIN
-- 変数宣言
DECLARE @returnValue INT = 0; -- 受け取り用
DECLARE @ERR_MSG NVARCHAR(300); -- 別プロシージャからエラーメッセージを取得
BEGIN TRY
BEGIN TRANSACTION;
-- 処理1
EXEC @returnValue = T_SQL2
@id = @p0 -- 値1
, @code = @p1 -- 値2
, @errMSG = @ERR_MSG OUTPUT; -- エラーメッセージ取得
-- returnValueが1(エラー)の場合
IF @returnValue = 1
BEGIN
ROLLBACK TRANSACTION;
RETURN; -- ロールバックし処理終了
END;
-- 処理2
EXEC @returnValue = T_SQL3
@id = @p0 -- 値1
, @code = @p1 -- 値2
, @errMSG = @ERR_MSG OUTPUT; -- エラーメッセージ取得
-- returnValueが1(エラー)の場合
IF @returnValue = 1
BEGIN
ROLLBACK TRANSACTION; -- ロールバックし処理終了
RETURN;
END;
-- コミット
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- ロールバック
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
PRINT @errMSG;
END CATCH;
END;
自分で試したこと
ROLLBACK TRANSACTION;の後に、RETURNではなく、THROWなども試しましたが、上手く動きませんでした。
0 likes