gpt4 book ai didi

sql-server - 存储过程中的异常流调用另一个存储过程

转载 作者:行者123 更新时间:2023-12-04 06:19:23 24 4
gpt4 key购买 nike

我有一个调用另一个存储过程的存储过程。 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

最佳答案

您需要有一个外部 TRY/CATCH堵塞。

如果您只有 SP2 中的错误捕获,则当 SP2 出错时它将中止。
然后它将错误代码传递回 SP1,但在大多数情况下 SP1 将继续执行(异常(exception)情况是严重性为 20-25 的 fatal error )。

不使用 TRY/CATCH 就没有真正的固有错误捕获(或者检查 @@Error 如果你是老派) - 代码将继续执行,无论好坏。

关于sql-server - 存储过程中的异常流调用另一个存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6791163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com