我有一個調用另一個存儲過程的存儲過程。 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