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

标签 sql-server sql-server-2008

@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/

相关文章:

c# - Asp.NET MVC 应用程序上的 MySQLRoleProvider 错误但仅使用 SQLServer

sql - 如何处理 & XML 格式的字符

sql-server - SQL Server 中的 C# float 转实数

sql-server - 地理空间支持,SQL Server 08 vs MongoDB?

sql - 使用一组值 sql 更新多行

sql - 多条记录的 SCOPE_IDENTITY

sql - 从按另一个 ID 分组的表中选择最新的(前 1 个)

基于日期的 SQL Case 语句

sql - 等于操作中 "SQL_Latin1_General_CP1_CI_AS"和 "Modern_Spanish_CI_AS"之间的排序规则冲突

sql-server - Management Studio 中缺少集成服务目录