我遇到了TRY ... CATCH块的问题。有人可以解释为什么以下代码不会执行我的sp?
DECLARE @Result int
SET @Result = 0
BEGIN TRY
SELECT * FROM TableNoExist
END TRY
BEGIN CATCH
SET @Result = ERROR_NUMBER()
END CATCH
EXEC dbo.spSecurityEventAdd @pSecurityEventTypeID = 11, @pResult = @Result
但是这段代码确实有效:
DECLARE @Result int
SET @Result = 0
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
SET @Result = ERROR_NUMBER()
END CATCH
EXEC dbo.spSecurityEventAdd @pSecurityEventTypeID = 11, @pResult = @Result
我想确保抓住所有错误。 感谢
答案 0 :(得分:2)
编译和语句级重新编译错误
如果错误发生在与TRY ... CATCH构造相同的执行级别,则TRY ... CATCH将无法处理两种类型的错误:
编译错误,例如阻止批处理执行的语法错误。
语句级重新编译期间发生的错误,例如由于延迟名称解析而在编译后发生的对象名称解析错误。
答案 1 :(得分:1)
看起来thread回答了你的问题。