2010-02-26 34 views
1

我遇到TRY ... CATCH块的问题。有人可以解释为什么下面的代码不会执行我的sp?TRY ...将错误导入错误日志表

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

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

有两种类型的错误不会被TRY ... CATCH如果在相同的执行水平为TRY ... CATCH构造发生错误处理:

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

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

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