您的位置:首页 > 数据库

MS SQL SERVER 存储过程事务的实现方式

2012-03-18 20:30 489 查看
MS SQL SERVER 存储过程事务的实现方式

目前找到两种实现方式:

  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';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: