Sql server 在sql server中同时使用@error和try…catch错误处理有意义吗?

Sql server 在sql server中同时使用@error和try…catch错误处理有意义吗?,sql-server,sql-server-2008,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行有意义吗?它会在错误场景中被击中吗?如果一个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
开始尝试
从表C中选择a、b,其中a>3,b<2
设置@error=@@error
如果@error 0 begin raiseerror(“error”,16,1)end
结束尝试
开始捕捉
选择错误消息()
端接

不,它永远不会被击中。这很容易在这里演示:

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
DECLARE@error int
开始尝试
选择1/0
设置@error=@@error
如果@错误0
begin raiserror('error',16,1)
结束
结束尝试
开始捕捉
选择错误消息()
端接
选择@error
我怀疑有人更新了一些旧代码,却没有真正理解他们在做什么

在每个成功的语句之后,
@error
将被设置为0,但在出现错误的情况下永远不会获得赋值,因为它将被
TRY…CATCH
绕过