使用SQL Server';如何处理错误?

使用SQL Server';如何处理错误?,sql,sql-server,error-handling,goto,Sql,Sql Server,Error Handling,Goto,我在年阅读了有关SQL Server中的错误处理的文章,他们建议在某些情况下使用SQL Server的GOTO回滚事务。例如: BEGIN TRAN UPDATE Authors SET Phone = '415 354-9866' WHERE au_id = '724-80-9391' SELECT @intErrorCode = @@ERROR IF (@intErrorCode <> 0) GOTO PROBLEM UPDAT

我在年阅读了有关SQL Server中的错误处理的文章,他们建议在某些情况下使用SQL Server的GOTO回滚事务。例如:

BEGIN TRAN
    UPDATE Authors
    SET Phone = '415 354-9866'
    WHERE au_id = '724-80-9391'

    SELECT @intErrorCode = @@ERROR
    IF (@intErrorCode <> 0) GOTO PROBLEM

    UPDATE Publishers
    SET city = 'Calcutta', country = 'India'
    WHERE pub_id = '9999'

    SELECT @intErrorCode = @@ERROR
    IF (@intErrorCode <> 0) GOTO PROBLEM
COMMIT TRAN

PROBLEM:
IF (@intErrorCode <> 0) BEGIN
PRINT 'Unexpected error occurred!'
    ROLLBACK TRAN
END
开始传输
更新作者
设置电话='415354-9866'
其中au_id='724-80-9391'
选择@interrocode=@@ERROR
如果(@InterroCode 0)转到问题
更新发布者
设置城市='加尔各答',国家='印度'
其中pub_id='9999'
选择@interrocode=@@ERROR
如果(@InterroCode 0)转到问题
提交传输
问题:
如果(@InterroCode 0)开始
打印“发生意外错误!”
回滚传输
结束
这篇文章是近10年前写的,我听说使用GOTO通常是个坏主意。对于SQL Server中的错误处理,上述方法是否可行?如果没有,有人能推荐一个更好的替代方案吗?

您应该在SQL 2005中使用+

BEGIN TRY
    BEGIN TRAN

    UPDATE Authors
    SET Phone = '415 354-9866'
    WHERE au_id = '724-80-9391'

    UPDATE Publishers
    SET city = 'Calcutta', country = 'India'
    WHERE pub_id = '9999'

    COMMIT TRAN        
END TRY
BEGIN CATCH
    PRINT 'Unexpected error occurred!'
    IF XACT_STATE() <> 0
        ROLLBACK TRAN    
END CATCH
开始尝试
开始训练
更新作者
设置电话='415354-9866'
其中au_id='724-80-9391'
更新发布者
设置城市='加尔各答',国家='印度'
其中pub_id='9999'
提交传输
结束尝试
开始捕捉
打印“发生意外错误!”
如果XACT_STATE()0
回滚传输
端接

您必须在
异常处理中加入
设置XACT\u ABORT ON

Begin Try
SET XACT_ABORT ON

BEGIN TRAN
    UPDATE Authors
    SET Phone = '415 354-9866'
    WHERE au_id = '724-80-9391'

    UPDATE Publishers
    SET city = 'Calcutta', country = 'India'
    WHERE pub_id = '9999'
COMMIT TRAN

End Try

Begin Catch
    Rollback Tran
End Catch
你检查过这个了吗?