SqlServer嵌套事务机制.docx

SqlServer嵌套事务机制.docx

ID:48475466

大小:74.84 KB

页数:6页

时间:2020-02-04

SqlServer嵌套事务机制.docx_第1页
SqlServer嵌套事务机制.docx_第2页
SqlServer嵌套事务机制.docx_第3页
SqlServer嵌套事务机制.docx_第4页
SqlServer嵌套事务机制.docx_第5页
资源描述:

《SqlServer嵌套事务机制.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、今天我们主研究一下SqlServer中嵌套事务使用。代码能说明大多数问题,看代码。1.嵌套事务提交原理测试[c-sharp] viewplaincopy1.PRINT 'Trancount before transaction: ' + CAST(@@trancount as char(1))   2.  3.BEGIN TRAN  4.PRINT 'After first BEGIN TRAN: ' + CAST(@@trancount as char(1))  5.  6.BEGIN TRAN  7.PRINT 'After second BEG

2、IN TRAN: ' + CAST(@@trancount as char(1))  8.COMMIT TRAN  9.  10.PRINT 'After first COMMIT TRAN: ' + CAST(@@trancount as char(1))  11.COMMIT TRAN  12.  13.PRINT 'After second COMMIT TRAN: ' + CAST(@@trancount as char(1))  结果:Trancountbeforetransaction:0AfterfirstBEGINTRAN:1Afte

3、rsecondBEGINTRAN:2AfterfirstCOMMITTRAN:1AftersecondCOMMITTRAN:0我们可以得出:1.可以看到每一个BEGINTRAN语句都会使@@TRANCOUNT增加1;2.每一个COMMITTRAN语句都会使@@TRANCOUNT减少1;3.如前所述,一个值为0的@@TRANCOUNT意味着没有打开的事务;4.因此,在@@TRANCOUNT值从1降到0时结束的事务发生在最外层事务提交的时候。2.嵌套事务回滚2.1 嵌套事务回滚最外面事务,对内部事务有什么影响?我们再来看一段代码:[c-sharp] vi

4、ewplaincopy1.-- 创建临时表  2.CREATE TABLE #TestTrans(Cola INT PRIMARY KEY,  3.               Colb varchar(20) NOT NULL);  4./* 外部事务 */  1.BEGIN TRANSACTION OutOfProc;  2.--内部事务  3.    BEGIN TRANSACTION InProc  4.      INSERT INTO #TestTrans VALUES (1,'aaaa');  5.    COMMIT TRANSACT

5、ION InProc;  6.      7./* 回滚外部事务,也会回滚内部事务 */  8.ROLLBACK TRANSACTION OutOfProc;  9.  10./*无数据,1说明最外层事务回滚,里面所有的事务都会回滚 */  11.SELECT * FROM #TestTrans;  12.  13.drop table #TestTrans  结果:没有数据。现在看来:无论数据是否提交,只要最外层回滚了就会导致所有内部所有嵌套类回滚。2.2嵌套事务回滚内部嵌套事务呢?再看一段代码:[c-sharp] viewplaincopy1.-

6、- 创建临时表  2.CREATE TABLE #TestTrans(Cola INT PRIMARY KEY,  3.               Colb varchar(20) NOT NULL);  4./* 外部事务 */  5.BEGIN TRANSACTION OutOfProc;  6.--内部事务  7.    BEGIN TRANSACTION InProc  8.      INSERT INTO #TestTrans VALUES (1,'aaaa');  9.    ROLLBACK TRANSACTION InProc; 

7、 10.      11.    --内部事务2  12.    BEGIN TRANSACTION InProc2  13.      INSERT INTO #TestTrans VALUES (2,'222');  14.    COMMIT TRANSACTION InProc2;  15.      16./* 提交外部事务 */  17.COMMIT TRANSACTION OutOfProc;  18.  19./*出错:内部事务未回滚,内部事务不能回滚,"找不到该名称的事务或保存点。" */  20.SELECT * FROM #Te

8、stTrans;  21.  22.drop table #TestTrans  结果:有异常信息:(1行受

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。