@error 行在这里有意义吗?在错误情况下它还会被击中吗?如果 try block 内有多个 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
最佳答案
不,它永远不会被击中。这很容易在这里演示:
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
.
关于sql-server - 在sql server中同时使用@@error和try...catch错误处理是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9949057/