使用SQL Server';如何处理错误?
我在年阅读了有关SQL Server中的错误处理的文章,他们建议在某些情况下使用SQL Server的GOTO回滚事务。例如:使用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
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
你检查过这个了吗?