SQL Server误区30日谈 第26天 SQL Server中存在真正的“事务嵌套
误区 #26: SQL Server中存在真正的“事务嵌套” 嵌套事务可不会像其语法表现的那样看起来允许事务嵌套。我真不知道为什么有人会这样写代码,我唯一能够想到的就是某个哥们对SQL Server社区嗤之以鼻然后写了这样的代码说:“玩玩你们”。 代码如下:CREATE DATABASE NestedXactsAreNotReal; 测试 #2:嵌套事务中内部事务提交后会保存内部事务的修改吗? 代码如下:BEGIN TRAN OuterTran; GO BEGIN TRAN InnerTran; GO INSERT INTO t1 DEFAULT Values; GO 1000 COMMIT TRAN InnerTran; GO SELECT COUNT (*) FROM t1; GO 正如我所期待,得到的结果是1000。这说明内部事务提交是会修改到磁盘的。但是如果这时外部事务回滚的话,那么不应该回滚内部事务… 代码如下:ROLLBACK TRAN OuterTran; GO SELECT COUNT (*) FROM t1; GO 但运行上面查询后结果是0,这说明外部事务的回滚会影响内部事务。 测试 #3:提交嵌套的事务的内部事务至少可以让我清除日志吧。在开始这个测试之前我首先清除了日志,然后运行如下代码: 代码如下:BEGIN TRAN OuterTran; GO BEGIN TRAN InnerTran; GO INSERT INTO t1 DEFAULT Values; GO 1000 DBCC SQLPERF ('LOGSPACE'); GO 得到结果: ![]() 代码如下:COMMIT TRAN InnerTran; GO CHECKPOINT; GO DBCC SQLPERF ('LOGSPACE'); GO ![]() 代码如下:COMMIT TRAN OuterTran; GO CHECKPOINT; GO DBCC SQLPERF ('LOGSPACE'); GO ![]() 对于嵌套事务来说---Just Say no。(这句话你可以当作来自SQLSkill.com的一个热心的家伙给的福利:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- T-SQL循环遍历XML数据列以派生唯一的路径集
- SQL 导入导出Excel数据的语句
- 使用Bucardo5实现PostgreSQL的主数据库复制
- sql-server – SQL SERVER代理自动停止工作
- 在sqlserver中的unicode数据类型和非unicode数据类型的区别
- T-SQL 查询语句的执行顺序解析
- sql-server – 是否有一种备份数PB数据并存储的好方法?
- mysql 5.7.15版本安装配置方法图文教程
- SQL Server 将Reporting services的RDL文件拷贝到另外一台机
- sql-server – 如何在VB.NET中安装可以安装SQL Server Expr