我有一个调用另一个存储过程的存储过程。 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
在我的问题的例子中,错误会引发到SP1中的@Err变量吗? –
@AJ - 我不这么认为,除非你为每个SP调用使用返回码和输出参数。 – JNK