【发布时间】:2011-07-22 14:01:38
【问题描述】:
我有一个调用另一个存储过程的存储过程。 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
【问题讨论】:
标签: sql-server tsql stored-procedures raiserror