2

別のストアドプロシージャを呼び出すストアドプロシージャがあります。SP2には、try / transaction / catch / rollback/raiserrorがあります。SP2でエラーが発生した場合、SP1を介して呼び出し元にバブルアップしますか、それともtry / catchでSP2への呼び出しをネストする必要がありますか?後者の場合、SP1を起動/終了するときに、SP2からのエラーの「スタックトレース」を強制終了しないようにするにはどうすればよいですか?

-これにより、SP2からのエラーが発生し、SP1も終了しますか?

EXEC dbo.storedProc2 @someParameter = @someValue 

-または、これを行う必要がありますか?

BEGIN TRY
    EXEC dbo.storedProc2 @someParameter = @someValue
END TRY
BEGIN CATCH
    -- this is what I normally do in a simple catch/raise scenario:
    -- will it kill the error stack?
    DECLARE @ErrMsg VARCHAR(4000), @ErrSeverity INT, @ErrState INT, @ErrLine INT
    SELECT @ErrMsg = ERROR_MESSAGE() + '  Line %d', 
           @ErrSeverity = ERROR_SEVERITY(), 
           @ErrState = ERROR_STATE(),
           @ErrLine = ERROR_LINE()
    RAISERROR(@ErrMsg, @ErrSeverity, @ErrState, @ErrLine)
END CATCH
4

2 に答える 2

3

TRY/CATCH外側のブロックが必要になります。

SP2にエラートラップしかない場合、SP2エラーが発生すると中止されます。
その後、エラーコードがSP1に返されますが、SP1はほとんどの状況で実行を継続します(例外は重大度20〜25の致命的なエラーです)。

TRY/CATCH使用せずに(またはあなたが古い学校かどうかをチェックして) 、本当の固有のエラートラップはありません@@Error-コードは良くも悪くも実行し続けます。

于 2011-07-22T14:47:19.437 に答える
0

dbo.storedProc2内のエラーをトラップして処理する必要があります

次に、returnnメソッドを使用してエラーコードを返します

その後、SP1は、必要な方法でそのエラーを処理できます。

于 2011-07-22T15:29:01.643 に答える