Tsql 尝试…将错误捕获到错误日志表中

Tsql 尝试…将错误捕获到错误日志表中,tsql,error-handling,Tsql,Error Handling,我有一个问题,尝试…捕捉块。有人能解释一下为什么下面的代码不会执行我的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 = @Res

我有一个问题,尝试…捕捉块。有人能解释一下为什么下面的代码不会执行我的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
我想确保我捕捉到了所有的错误。
感谢编译和语句级重新编译错误

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

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

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

这似乎回答了您的问题