如何在多个存储过程中使用事务?

cha*_*ama 9 sql-server transactions nested sql-server-2005

您可以在一个存储过程中启动事务,然后将其回滚或在嵌套过程中提交吗?

gbn*_*gbn 10

提交和回滚具有不同的效果

  • COMMIT减少@@ TRANCOUNT
  • ROLLBACK将其推回零

发生这种情况是因为SQL Server并不真正支持嵌套事务.

如果您在嵌套的存储过程(而不是事务)中提交或回滚,那么由于启动和输入的@@ TRANCOUNT不匹配,您将生成错误266

回滚问题可以通过使用SET XACT_ABORT ON来解决,这是"自动回滚"(简单地)并且抑制错误266.

提交问题......你不能这样.但是,您可以通过在存储的proc条目上注明@@ TRANCOUNT并在零时提交来控制它发生的位置.

有关正确的事务处理,请在此处查看我的答案: 包含TRY CATCH ROLLBACK模式的嵌套存储过程?并且我是否在T-SQL的catch块中回滚之前计算事务?