TRY ... CATCH错误进入和错误日志表

时间:2010-02-26 21:44:53

标签: tsql error-handling

我遇到了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

我想确保抓住所有错误。 感谢

2 个答案:

答案 0 :(得分:2)

编译和语句级重新编译错误

如果错误发生在与TRY ... CATCH构造相同的执行级别,则TRY ... CATCH将无法处理两种类型的错误:

编译错误,例如阻止批处理执行的语法错误。

语句级重新编译期间发生的错误,例如由于延迟名称解析而在编译后发生的对象名称解析错误。

http://msdn.microsoft.com/en-us/library/ms179296.aspx

答案 1 :(得分:1)

看起来thread回答了你的问题。