您的位置:首页 > 数据库

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

2010-07-01 19:38 471 查看
MS SQL SERVER 存储过程事务的实现方式

目前找到两种实现方式:

  1, 使用事务的存储过程使用特殊命名, 如UP_ProductAdd_Tran, 内部只需一对事务语句即可管理所有牵涉到业务的其他过程; 其他未使用此种方式命名的过程, 内部不能使用事务相关语句, 只需输出成功失败. 这种方式的好处是容易理解, 你只需要专心业务上的代码, 意外的时候返回错误, 在最外层直接回滚即可...缺点是你可能会产生很多_Tran命名的存储过程, 不好维护.

UP_TestTransaction

CREATE PROCEDURE [dbo].[UP_TestTransaction]
@LocalTranCount int output,    -- 输出信息
@ResultMessage nvarchar(255) output    -- 输出信息
-- 其他字段
-- 其他字段
AS
-- declare @LocalTranCount  int;
-- set @LocalTranCount  = 0;
-- 将 @LocalTranCount 定义为输入输出参数
-- 将 @LocalTranCount 定义为输入输出参数
-- 当该存储过程被其他存储过程调用时
-- 传入当前的事务计数

declare @ErrorCode int;
set @ErrorCode = 0;

begin Transaction
set @LocalTranCount  = @LocalTranCount + 1;

begin Transaction
set @LocalTranCount  = @LocalTranCount + 1;
insert into [tbCar] (
CarCode,
CarHongKongCode,
NormalDriver,
NormalDriverTel,
BelongDepartmentId,
BelongDepartment,
CreateByUserId,
CreateByUser
) values (
'------',
'5555555555',
'6666666666',
'77777777',
0,
'uuuuuuu',
0,
'bbbbbbb'
)

begin
set @ErrorCode = 10;
set @ResultMessage = '---------';
goto ErrorLabel;
end

begin Transaction
set @LocalTranCount  = @LocalTranCount + 1;
insert into [tbCar] (
CarCode,
CarHongKongCode,
NormalDriver,
NormalDriverTel,
BelongDepartmentId,
BelongDepartment,
CreateByUserId,
CreateByUser
) values (
'--4353---',
'5555555555',
'6666666666',
'77777777',
0,
'uuuuuuu',
0,
'bbbbbbb'
)

begin
set @ErrorCode = 20;
set @ResultMessage = '---------';
goto ErrorLabel;
end
commit Transaction
commit Transaction

ErrorLabel:
IF(@@TranCount = @LocalTranCount)
RollBack Transaction;
Else
Commit Transaction;

return @ErrorCode;


参考资料:
http://www.cnblogs.com/montaque/archive/2005/03/12/117410.html 第一页评论

虽然只有几个字, 但是写的时候还是感觉到文字不行..好像说不清楚 ~!@#$%^&*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: