




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第16章 事务处理第16章 事务处理16.1 自动事务处理USE AdventureWorks;GO -第1个批CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3);GO -第2个批INSERT INTO TestBatch VALUES (1, aaa);INSERT INTO TestBatch VALUES (2, bbb);INSERT INTO TestBatch VALUSE (3, ccc); - 语法有错误GO -第3个批SELECT * FROM TestBatch; - Returns no rows.GO -第4个批USE AdventureWorks;GOCREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3);GOINSERT INTO TestBatch VALUES (1, aaa);INSERT INTO TestBatch VALUES (2, bbb);INSERT INTO TestBatch VALUES (1, ccc); - 重复键错误.GOSELECT * FROM TestBatch; - 返回1和2行USE AdventureWorks;GOCREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3);GOINSERT INTO TestBatch VALUES (1, aaa);INSERT INTO TestBatch VALUES (2, bbb);INSERT INTO TestBch VALUES (3, ccc); - 表名称错误GOSELECT * FROM TestBatch; - 返回1和2行16.2 显式事务处理BEGIN TRY BEGIN TRANSACTION - 开始事务 INSERT MyTable VALUES(3,ASDF) ; - 插入数据 COMMIT TRANSACTION - 提交插入操作END TRY - 如果上面的TRY块中出现错误,将执行下面CATCH块中的语句BEGIN CATCH SELECT ERROR_NUMBER() AS ERRORNUMBER ; - ERROR_NUMBER函数用于返回错误编号 ROLLBACK TRANSACTION -回滚事务操作END CATCH16.3 隐式事务处理USE AdventureWorks;GOCREATE TABLE ImplicitTran (Cola int PRIMARY KEY, Colb char(3) NOT NULL);BEGIN TRY INSERT INTO ImplicitTran VALUES (1, aaa); INSERT INTO ImplicitTran VALUES (1, bbb); - 提交事务 COMMIT TRANSACTION;END TRY- 如果上面的TRY块中出现错误,将执行下面CATCH块中的语句BEGIN CATCH ROLLBACK TRANSACTION; -回滚事务操作END CATCHSELECT * FROM ImplicitTran;DELETE FROM ImplicitTran;SET IMPLICIT_TRANSACTIONS ON; - 启动隐式事务处理GOBEGIN TRY INSERT INTO ImplicitTran VALUES (1, aaa); INSERT INTO ImplicitTran VALUES (1, bbb); - 提交事务 COMMIT TRANSACTION;END TRY- 如果上面的TRY块中出现错误,将执行下面CATCH块中的语句BEGIN CATCH ROLLBACK TRANSACTION; -回滚事务操作END CATCHSET IMPLICIT_TRANSACTIONS OFF; -关闭隐式事务处理SELECT * FROM ImplicitTran;16.4 使用嵌套事务USE AdventureWorks;GOCREATE TABLE TestTrans(Cola INT PRIMARY KEY, Colb CHAR(3) NOT NULL);GOCREATE PROCEDURE TransProc PriKey INT, CharCol CHAR(3)ASBEGIN BEGIN TRANSACTION InProc INSERT INTO TestTrans VALUES (PriKey, CharCol) INSERT INTO TestTrans VALUES (PriKey + 1, CharCol) COMMIT TRANSACTION InProc;ENDGO- 开始一个事务并执行TransProc存储过程BEGIN TRANSACTION OutOfProc;EXEC TransProc 1, aaa;- 回滚外部事务,也将回滚TransProc中的嵌套事务ROLLBACK TRANSACTION OutOfProc;GOEXECUTE TransProc 3,bbb;GO- 下面的SELECT语句显示表中仅有Cola列为3和4的行,而没有上面提交1和2行。- 这说明由第一个EXECUTE语句执行的提交动作被外部的回滚操作覆盖了,并没有- 执行。因为对于已实际提交的操作是无法回滚的SELECT * FROM TestTrans;USE AdventureWorks;GOCREATE TABLE TestTrans(Cola INT PRIMARY KEY, Colb CHAR(3) NOT NULL);GOCREATE PROCEDURE TransProc PriKey INT, CharCol CHAR(3)ASBEGIN BEGIN TRY BEGIN TRANSACTION InProc -开始InProc事务 INSERT INTO TestTrans VALUES (PriKey, CharCol) COMMIT TRANSACTION InProc; -提交事务 END TRY - 在出现提交错误时回滚操作,由于不能引用内部事务名称,在需要回滚时 - SQL Server将提示找不到InProc事务名称 BEGIN CATCH ROLLBACK TRANSACTION InProc END CATCHENDGO- 插入一行EXEC TransProc 1, aaa;GO- 开始一个事务并执行TransProc存储过程BEGIN TRANSACTION OutOfProc;GO- 再次执行下面的EXEC语句会造成TestTrans表中出现重复键,因此引发错误,这会- 导致执行TransProc存储过程中的CATCH部分,进行回滚操作。此时,SQL Server- 提示无法无法回滚InProc,找不到该名称的事务或保存点。全部提示信息如下:/* (0 行受影响)消息 6401,级别 16,状态 1,过程 TransProc,第 11 行无法回滚 InProc。找不到该名称的事务或保存点。消息 266,级别 16,状态 2,过程 TransProc,第 0 行EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数 = 1,当前计数 = 2。*/EXEC TransProc 1, aaa;GO- 下面的语句用于回滚所有操作,退出嵌套事务ROLLBACK TRANSACTION OutOfProc; CREATE PROCEDURE TransProc PriKey INT, CharCol CHAR(3)ASBEGIN BEGIN TRY BEGIN TRANSACTION InProc SAVE TRANSACTION ttt - 设置保存点 INSERT INTO TestTrans VALUES (PriKey, CharCol) COMMIT TRANSACTION InProc; END TRY BEGIN CATCH ROLLBACK TRANSACTION ttt - 回滚到保存点 - 由于仅是回滚到保存点,所以仍旧需要使用COMMIT语句提交并结束事务 - 否则无法退出嵌套。有关嵌套层次的信息,参考后面的TRANCOUNT函数介绍 COMMIT TRANSACTION InProc END CATCHEND16.5 使用事务保存点SET NOCOUNT OFF;GOUSE AdventureWorks;GOCREATE TABLE InvCtrl (WhrhousID int, PartNmbr int, QtyInStk int, ReordrPt int, CONSTRAINT InvPK PRIMARY KEY (WhrhousID, PartNmbr), CONSTRAINT QtyStkCheck CHECK (QtyInStk 0) );GOCREATE PROCEDURE OrderStock WhrhousID int, PartNmbr int, OrderQty intASDECLARE ErrorVar int;BEGIN TRY BEGIN TRANSACTION InProc; SAVE TRANSACTION StkOrdTrn; UPDATE InvCtrl SET QtyInStk = QtyInStk - OrderQty WHERE WhrhousID = WhrhousID AND PartNmbr = PartNmbr; COMMIT TRANSACTION InProc; RETURN 0;END TRYBEGIN CATCH SELECT ErrorVar = error; IF (ErrorVar = 547) BEGIN ROLLBACK TRANSACTION StkOrdTrn; COMMIT TRANSACTION InProc RETURN (SELECT QtyI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025新外研版初中英语七年级下册知识点归纳总结(复习必背)
- 广州花都城投产融商业投资有限公司招聘考试真题2024
- 跨境电商人才招聘解决方案
- 长治急救知识培训班课件
- 难点解析-人教版八年级物理上册第4章光现象章节练习试题(解析卷)
- 山东注册环保工程师考试(大气污染防治专业案例)全真模拟题库及答案(2025年)
- 难点解析-人教版八年级物理上册第5章透镜及其应用-透镜单元测试试卷(详解版)
- 2025年燃气经营企业从业人员专业考试考前模拟试题及答案
- 2025金属非金属矿山主要负责人和安全生产管理人员考试综合练习题及答案
- 2025年煤矿安全生产管理人员安全生产知识和管理能力考试测试题及答案
- 【历年真题】2018年10月00688设计概论自考试卷
- 2023年浙江国科大杭州高等研究院招聘12人笔试参考题库(共500题)答案详解版
- 2023第八届全国学生学宪法讲宪法活动竞赛题库(汇总)
- GJB9001C-2017国军标标准培训讲义
- 《妇产科学课件:宫颈癌的筛查与防治》
- 服务型制造标准体系建设指南(2023年)征
- GA/T 2060-2023法庭科学毛发中甲基苯丙胺等11种毒品及代谢物检验液相色谱-质谱法
- 工程监理大纲监理方案服务方案
- C型钢检验报告
- 主体结构验收方案(示范文本)
- 八年级美术PPT课件 荷兰后印象派画家梵高作品介绍 《向日葵》《吃土豆的人》《割耳朵后的自画像》
评论
0/150
提交评论