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)
文章来自学IT网:http://www.xueit.com/html/2009-06/26_2116_00.html

阅读更多
文章标签: sql insert
个人分类: SQL SERVER
上一篇连接数据事务的应用
下一篇System.Runtime.InteropServices.COMException (0x8000401A): Retrieving the COM class factory for component with CLSID
想对作者说点什么? 我来说一句

sql 实现银行转账

2010年03月18日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭