SQL函数:事务实例

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

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 ( @ToAccountNo 1 , @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 )

你可能感兴趣的:(sql)