SQL Server2005触发器模拟ATM机存取钱的功能
根据上面的简单介绍,我们举一个例子。
以下是一个银行系统的二张表:
银行卡信息表(卡号、银行名称、帐户名、密码、余额)
交易信息表(交易号、卡号、交易日期、交易类型、金额),交易类型分“存入”、“支取”和“转账“
创建一个触发器,该触发器可以根据交易信息表内容的变化而修改银行卡的余额信息
表信息如下:
create trigger tradeinfo_trigger on tradeinfofor insertasbegindeclare @v_tradetype char(10) --获取交易类型declare @v_trademoney money --获取交易的moneydeclare @v_cardid char(10) --银行卡的iddeclare @v_Balance money --余额set @v_tradetype=(select tradetype from inserted)set @v_trademoney=(select trademoney from inserted)set @v_cardid=(select cardid from inserted)set @v_Balance=(select Balance from cardinfo where cardid = @v_cardid)if @v_tradetype = '取钱' and @v_trademoney <= @v_Balancebeginupdate cardinfo set Balance=@v_Balance-@v_trademoney where cardid=@v_cardidendelse if @v_tradetype = '存钱'beginupdate cardinfo set Balance=@v_Balance+@v_trademoney where cardid=@v_cardidendelse beginrollback transaction --如果操作失败(所有存钱、取钱过程终止,且数据不进行数据库中)endend