在sql server中同时使用@@ error和try ... catch错误处理是否有意义?

时间:2012-03-30 19:07:05

标签: sql-server sql-server-2008

@error行甚至在这里有意义吗?它会在错误情况下被击中吗?如果try块中有多个sql语句,然后进行类似的检查,会发生什么?

begin try
    Select a,b from tableC where a > 3 and b < 2
    Set @error = @@error
    If @error <> 0 begin raiseerror("error",16,1)end
end try
begin catch
    select error_message()
end catch

1 个答案:

答案 0 :(得分:2)

不,它永远不会受到打击。这很容易证明:

DECLARE @error int
begin try
    Select 1/0
    Set @error = @@error
    If @error <> 0 
        begin raiserror('error',16,1)
        end
end try
begin catch
    select error_message()
end catch

SELECT @error

我怀疑有人在没有真正了解他们正在做什么的情况下更新了一些旧代码。

每个成功的语句后@error将被设置为0,但是如果出现错误则永远不会获得值,因为TRY...CATCH会绕过它。