我在 this article 中阅读了有关 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
这篇文章是近 10 年前写的,我听说使用 GOTO 通常不是一个好主意。以上是 SQL Server 中错误处理的好方法吗?如果没有,有人可以建议更好的选择吗?
最佳答案
您应该使用Try/Catch在 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
关于sql - 使用 SQL Server 的 GOTO 进行错误处理是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11141814/