別のストアドプロシージャを呼び出すストアドプロシージャがあります。 SP2にはtry/transaction/catch/rollback/raiserrorがあります。 SP2でエラーが発生した場合は、SP1を呼び出して呼び出し元に送信されますか、またはSP2への呼び出しをtry/catchでネストする必要がありますか?後者の場合、どうすれば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
私の質問の例でエラーがSP1の@Err変数に引き上げられますか? –
@AJ - すべての 'SP'コールに対してリターンコードと出力パラメタを使用しない限り、そうは思いません。 – JNK