@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
答案 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
会绕过它。