当前位置: 代码迷 >> Sql Server >> 请帮忙 看看小弟我写的这个触发器错在哪里了
  详细解决方案

请帮忙 看看小弟我写的这个触发器错在哪里了

热度:86   发布时间:2016-04-27 12:42:38.0
请帮忙 看看我写的这个触发器错在哪里了
请帮忙 看看我写的这个触发器错在哪里了

内容很简单,就是一个银行存取款的测试数据库。其中Depositor表记录储户信息,Access记录存取款信息,其中触发器建立在了Access表中,要求实现存取款的操作要相应更改Depositor表中的记录。Thrift表记录银行信息,在这个问题中和这个表没关系

但我测试了下,在Access表进行输入,实际没有任何反应。不知为何

MDF文件下载地址:
http://115.com/file/c2k78y85#
bank.mdf

LDF文件下载地址:
http://115.com/file/c2k7800b#
bank-Log.ldf
SQL code
create trigger opera on Accessinstead of insertasbegin    if exists (select 1 from inserted where mark='取')    begin        if exists (select 1 from inserted a inner join Depositor b on a.dno = b.dno and a.mark='取' and a.accessnum>b.remainder)        begin            print '该客户没有足够的金额可取'            rollback tran        end                update Depositor set remainder = remainder - accessnum        from Depositor a inner join inserted b on a.dno = b.dno and b.mark='取'        end        if exists (select 1 from inserted where mark='存' )    begin        update Depositor set remainder = remainder + accessnum        from Depositor a inner join inserted b on a.dno = b.dno and b.mark='存'            end    insert into Access    select * from insertedend


------解决方案--------------------
SQL code
create trigger opera on Accessinstead of insertasbegin    if exists (select 1 from inserted where mark='取')    begin        if exists (select 1 from inserted a inner join Depositor b on a.dno = b.dno and a.mark='取' and a.accessnum>b.remainder)        begin            print '该客户没有足够的金额可取'            rollback tran        end      else         begin            update Depositor set remainder = remainder - accessnum           from Depositor a inner join inserted b on a.dno = b.dno and b.mark='取'        end       end        if exists (select 1 from inserted where mark='存' )    begin        update Depositor set remainder = remainder + accessnum        from Depositor a inner join inserted b on a.dno = b.dno and b.mark='存'            end    insert into Access    select * from insertedend
------解决方案--------------------
SQL code
create trigger opera on Accessinstead of insertasbegin    if exists (select 1 from inserted where mark='取')    begin        if exists (select 1 from inserted a inner join Depositor b on a.dno = b.dno and a.mark='取' and a.accessnum>b.remainder)        begin            print '该客户没有足够的金额可取'            rollback tran        end        else        begin                update Depositor set remainder = remainder - accessnum        from Depositor a inner join inserted b on a.dno = b.dno and b.mark='取'        end    end    else     if exists (select 1 from inserted where mark='存' )    begin        update Depositor set remainder = remainder + accessnum        from Depositor a inner join inserted b on a.dno = b.dno and b.mark='存'            end    insert into Access    select * from insertedendtry
  相关解决方案