0

申し訳ありませんが、これは繰り返しです。私が求めていたものに適合する回答済みの質問が見つかりませんでした。(これはストアド プロシージャで RAISERROR を使用してパラメーターを作成するにはどうすればよいですか? に似ています)

私は SQL Server エージェントで 1 ステップの非常に単純な仕事をしています。パッケージは、ストアド プロシージャのみを実行します。ストアド プロシージャには try / catch ブロックがあり、例外を発生させようとするとキャッチされますが、伝播されず、ジョブがエラーを報告します。仕事は成功します。エラーをローカル テーブルに記録してコミットするので、実際に catch ブロックに入っていることがわかります。重大度レベル 16 および 20 でエラーを発生させようとしましたが、おそらく言及する価値のないものもいくつかありました。

これはパッケージの設定が原因で伝播されないのでしょうか?それともストアド プロシージャに問題がありますか? ありがとう。

-- dumbed down structure
BEGIN

    SET NOCOUNT ON;

    -- buncha vars
    BEGIN TRY
    BEGIN TRANSACTION

      set @StepNumber = 10;

      select 1/0;

    COMMIT TRANSACTION;
    RETURN 0;
    END TRY
    BEGIN CATCH

        -- get the error
        SELECT @ErrorMessage = ERROR_MESSAGE(),
               @ErrorSeverity = ERROR_SEVERITY(),
               @ErrorState = ERROR_STATE();

        -- rollback the transaction
            ROLLBACK TRANSACTION;

        -- log the caught exception into the local log
        set @LogTimestamp = GETUTCDATE(); 
        set @LogMessage = @SessionGUID + ' - ' + CAST(@StepNumber AS NVARCHAR) + ' - ' + ' ERROR - ENTERED CATCH BLOCK - ERROR_MESSAGE()=' + @ErrorMessage + ' ERROR_SEVERITY()=' + cast(@ErrorSeverity as nvarchar) + ' ERROR_STATE()=' + CAST(@ErrorState as nvarchar) ;
        insert into @LocalLog(TimestampDT, SourceVch, MessageVch) values (@LogTimestamp, @LogSource, @LogMessage);

        -- transfer local log to master log table
        BEGIN TRANSACTION;
            --insert into RealTable selecting from @LocalLog;
        COMMIT TRANSACTION;

        -- slightly modify the error message before raising it to parent process
        SET @ErrorMessage = @LogSource + ' - error with @StepNumber=[' +CAST(@StepNumber as nvarchar)+ '] ERROR_MESSAGE()=' + @ErrorMessage;

        -- rethrow the error to the calling process
        RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);

        -- do we need this return?
        RETURN @StepNumber;
    END CATCH
END

取得したログ テーブルは、少なくともエラーをキャッチしたことを示しています (ログ テーブルから)。"6a3e80fd-f480-459c-a42f-25fd3d5a42a8 - 125 - エラー - ENTERED CATCH BLOCK - ERROR_MESSAGE()=ゼロ除算エラーが発生しました。ERROR_SEVERITY()=16 ERROR_STATE()=1"

4

0 に答える 0