【发布时间】:2011-11-24 04:34:58
【问题描述】:
我有一个很大的生成脚本。它有多个批次(GO 语句)。第一行是BEGIN TRAN
如果在执行过程中出现任何错误,无论是使用RAISERROR 自己引发的,还是由 SQL Server 引发的,我都想回滚事务。我希望脚本继续执行到最后,然后回滚,而不是在发生任何错误时立即中止执行。
在脚本末尾检查@@error <> 0 似乎还不够,因为如果脚本中的最后一条语句成功,即使前面的语句失败,@@error 也会为 0。
我不能在一开始就声明@rollback BIT,因为脚本被分割成多个批次,所以变量超出了范围。
我明白RAISERROR 并不意味着我的交易会被回滚。
关于以兼容 SQL 2000 的方式实现此功能的最佳方式有什么建议吗?
【问题讨论】:
-
你没有收到错误:
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.? -
不,我不......即使我更早地引发错误,事务也会在最后提交
标签: sql-server sql-server-2005 transactions