MS SQL SERVER 存储过程事务的实现方式
2012-03-18 20:30
489 查看
MS SQL SERVER 存储过程事务的实现方式
目前找到两种实现方式:
1, 使用事务的存储过程使用特殊命名, 如UP_ProductAdd_Tran, 内部只需一对事务语句即可管理所有牵涉到业务的其他过程; 其他未使用此种方式命名的过程, 内部不能使用事务相关语句, 只需输出成功失败. 这种方式的好处是容易理解, 你只需要专心业务上的代码, 意外的时候返回错误, 在最外层直接回滚即可...缺点是你可能会产生很多_Tran命名的存储过程, 不好维护.
UP_TestTransaction
参考资料:
http://www.cnblogs.com/montaque/archive/2005/03/12/117410.html 第一页评论
虽然只有几个字, 但是写的时候还是感觉到文字不行..好像说不清楚 ~!@#$%^&*
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = true;
var cb_blogId = 70346;
var cb_entryId = 1769441;
var cb_blogApp = "ascrat";
var cb_blogUserGuid = "61a1e1ae-9659-df11-ba8f-001cf0cd104b";
var cb_entryCreatedDate = '2010/7/1 19:38:00';
目前找到两种实现方式:
1, 使用事务的存储过程使用特殊命名, 如UP_ProductAdd_Tran, 内部只需一对事务语句即可管理所有牵涉到业务的其他过程; 其他未使用此种方式命名的过程, 内部不能使用事务相关语句, 只需输出成功失败. 这种方式的好处是容易理解, 你只需要专心业务上的代码, 意外的时候返回错误, 在最外层直接回滚即可...缺点是你可能会产生很多_Tran命名的存储过程, 不好维护.
UP_TestTransaction
1 CREATE PROCEDURE [dbo].[UP_TestTransaction] 2 @LocalTranCount int output, -- 输出信息 3 @ResultMessage nvarchar(255) output -- 输出信息 4 -- 其他字段 5 -- 其他字段 6 AS 7 -- declare @LocalTranCount int; 8 -- set @LocalTranCount = 0; 9 -- 将 @LocalTranCount 定义为输入输出参数 10 -- 将 @LocalTranCount 定义为输入输出参数 11 -- 当该存储过程被其他存储过程调用时 12 -- 传入当前的事务计数 13 14 declare @ErrorCode int; 15 set @ErrorCode = 0; 16 17 begin Transaction 18 set @LocalTranCount = @LocalTranCount + 1; 19 20 begin Transaction 21 set @LocalTranCount = @LocalTranCount + 1; 22 insert into [tbCar] ( 23 CarCode, 24 CarHongKongCode, 25 NormalDriver, 26 NormalDriverTel, 27 BelongDepartmentId, 28 BelongDepartment, 29 CreateByUserId, 30 CreateByUser 31 ) values ( 32 '------', 33 '5555555555', 34 '6666666666', 35 '77777777', 36 0, 37 'uuuuuuu', 38 0, 39 'bbbbbbb' 40 ) 41 42 begin 43 set @ErrorCode = 10; 44 set @ResultMessage = '---------'; 45 goto ErrorLabel; 46 end 47 48 begin Transaction 49 set @LocalTranCount = @LocalTranCount + 1; 50 insert into [tbCar] ( 51 CarCode, 52 CarHongKongCode, 53 NormalDriver, 54 NormalDriverTel, 55 BelongDepartmentId, 56 BelongDepartment, 57 CreateByUserId, 58 CreateByUser 59 ) values ( 60 '--4353---', 61 '5555555555', 62 '6666666666', 63 '77777777', 64 0, 65 'uuuuuuu', 66 0, 67 'bbbbbbb' 68 ) 69 70 begin 71 set @ErrorCode = 20; 72 set @ResultMessage = '---------'; 73 goto ErrorLabel; 74 end 75 commit Transaction 76 commit Transaction 77 78 79 ErrorLabel: 80 IF(@@TranCount = @LocalTranCount) 81 RollBack Transaction; 82 Else 83 Commit Transaction; 84 85 return @ErrorCode;
参考资料:
http://www.cnblogs.com/montaque/archive/2005/03/12/117410.html 第一页评论
虽然只有几个字, 但是写的时候还是感觉到文字不行..好像说不清楚 ~!@#$%^&*
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = true;
var cb_blogId = 70346;
var cb_entryId = 1769441;
var cb_blogApp = "ascrat";
var cb_blogUserGuid = "61a1e1ae-9659-df11-ba8f-001cf0cd104b";
var cb_entryCreatedDate = '2010/7/1 19:38:00';
相关文章推荐
- MS SQL SERVER 存储过程事务的实现方式
- MS SQL Server 两种方式 实现事务
- MS SQLSERVER通用存储过程分页
- MS sql server 判断表/视图/存储过程是否存在
- 用Ms SQL Server 存储过程操作DBF文件
- 收集到的:如何调用存储过程,有返回值的,有参数的,存储过程中调用存储过程。(MS SQL Server)
- MS SQL Server 分页存储过程
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- 分页存储过程(二)在MS SQL Server中返回更加准确的分页结果
- CodeSmith 5.0工具实例篇系列3——根据表生成新增的存储过程,针对MS Sqlserver
- MS SQL Server:存储过程实例
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- MS SQL SERVER 存储过程小记!
- MS SQL Server 2005 通用分页存储过程
- CodeSmith 5.0工具实例篇系列4——根据表生成修改的存储过程,针对MS Sqlserver
- SQL存储过程事务处理方式大全
- MS SQLSERVER通用存储过程分页
- SQL SERVERR中未公开的存储过程sp_MSforeachtable
- 如何调用存储过程,有返回值的,有参数的,存储过程中调用存储过程。(MS SQL Server)
- sql存储过程循环实现事务