事务就是负责把一系列操作看做一个独立的逻辑单元,这些操作要么同时成功,要么同时失败。下面是一个经典的例子:

create procedure TransferMoeny
(
    
@FromAccountNo varchar(50),-- 转出账号
    @ToAccountNo varchar(50),--转入账号
    @MoneyCount money--转账金额
)
as
--判断账号是否存在
if exists (select 1 from 帐户表 where 账号 = @FromAccountNo
begin
    
if exists (select 1 from 帐户表 where 账号 = @ToAccountNo
    
begin
        
--判断转出金额是否大于当前余额
        if (select 当前余额 from 帐户表 where 账号 = @FromAccountNo>= @MoneyCount
        
begin
            
--开始转账
            begin transaction
            
insert into [存取记录表] ([账号],[存取类型][存取金额]values(@FromAccountNo-1,@MoneyCount)
            
if @@error <> 0
            
begin
                
rollback transaction--发生错误则回滚事务,无条件退出l
                return
            
end
                       
insert into [存取记录表] ([账号],[存取类型][存取金额]values(@ToAccountNo1,@MoneyCount)
            
if @@error <> 0
            
begin
                
rollback tran
                
return
            
end
            
commit transaction --两条语句都完成,提交事务
        end
        
else    
            
raiserror ('转账金额不能大于该账号的余额',16,1)
    
end
    
else
    
raiserror ('转入账号不存在',16,1)

end
else
    
raiserror ('转出账号不存在',16,1)
posted on 2009-06-26 19:11  李辉明  阅读(1819)  评论(0编辑  收藏  举报