嗨,我目前对TSQL中嵌套事务的理解是,如果你有多个事务(多个事务嵌套在一个“外部”事务中),所有的事务都必须提交(使用“外部”事务是最后一个)对数据库进行的任何更改。如果提交的数量少于未完成交易的数量,则不做与任何交易相关的更改。这是嵌套事务处理的正确概述吗?TSQL中的嵌套事务
10
A
回答
12
您对COMMIT
的描述是正确的。
Kalen Delaney has an article covering the same type of behavior that you describe.
然而,如在卡伦的文章中讨论,嵌套事务内的ROLLBACK
将其中发生回滚回滚整个外交易,不只是内部事务。
注意以下结果:
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
BEGIN TRAN
SELECT @@trancount
ROLLBACK TRAN
SELECT @@trancount
这MSDN文章中所描述的,Nesting Transactions:
的ROLLBACK WORK或ROLLBACK TRANSACTION语句不具有 事务名回滚所有嵌套事务并将 @@ TRANCOUNT减少为0.使用事务的ROLLBACK事务 一组嵌套事务中最外层事务的名称 将回滚所有嵌套事务并将@@ TRANCOUNT 减少为0.如果您不确定是否已处于事务中,请选择 @@ TRANCOUNT以确定它是否为1或更多。如果@@ TRANCOUNT为0,那么您的 不在事务中。
3
总之,你的回答是肯定的。从Nesting Transactions:
提交内部事务被SQL Server数据库 引擎忽略。该交易根据 在最外层交易结束时采取的行动提交或回滚。如果提交外部事务 ,则内部嵌套事务也提交 。如果外部交易回滚,则所有内部交易也会回滚,而不管内部交易是否单独提交。
关于ROLLBACks,只允许ROLLBACK整个外部事务。
相关问题
- 1. 在TSQL中回滚嵌套事务抛出错误
- 2. django中的嵌套事务?
- 3. ADO.NET中的嵌套事务
- 4. Neo4j中的嵌套事务
- 5. .NET中的嵌套事务
- 6. SQL嵌套事务
- 7. 嵌套事务 - MSDTC
- 8. EF6嵌套事务
- 9. 春嵌套事务
- 10. Dropwizard嵌套事务
- 11. 嵌套事务的目的
- 12. 嵌套事务的TransactionScope
- 13. Spring上的嵌套事务
- 14. 在ActiveRecord中需要嵌套事务的嵌套UI
- 15. 嵌套存储过程中的嵌套事务
- 16. TSQL嵌套基本查询
- 17. 嵌套游标TSQL(SQL Server)
- 18. tSQL - SQL 2008 - 嵌套查询?
- 19. SQL Server中的嵌套SQL事务
- 20. LINQ to SQL中的嵌套事务
- 21. J2EE 1.4中的嵌套事务支持
- 22. 二郎Mnesia的嵌套事务中止
- 23. Firebase中嵌套事务的影响?
- 24. postgresql 8.2中的嵌套事务?
- 25. 测试中的Android SQLite嵌套事务
- 26. EJB中的嵌套事务行为
- 27. 在phonegap中嵌套的sqlite事务
- 28. SqlTransaction和嵌套事务
- 29. 递归/嵌套事务
- 30. c#与sql嵌套事务