sql触发器

sql触发器

 

触发器是种特殊的存储过程。特殊在,当增删改的时候自动执行。

建个表如下:

CardTable表

BankTrans表:transMoney为正=存,为负=取。

)插入触发器

create trigger triggerBankTrans

on BankTrans

for insert

as

begin

  --对于插入触发器,有一个临时表inserted,这个临时表与我们触所在的表结构一致

  --并且里面只有一条数据,这条数据就是用户刚刚插入的这条数据

  declare @cardNumber nchar(3),@transMoney money,@currMoney money

  select @cardNumber=CardNumber,@transMoney=TransMoney from inserted

 

  update CartTable set CardMoney=CardMoney+@transMoney

  where CardNumber=@cardNumber

end

)删除触发器

--创建一个触器,让用户删除卡号表的时候,找一个交易记录有没有本卡的数据,如果有不允许删除

create[alter] trigger triggerCardTable

on CardTable

for delete

as

begin

    --删除时有一个临时表叫deleted,里面放的就是用户要删除的数据

    declare @cardNumber nchar(3)

    select @cardNumber=CardNumber from deleted

    if (exists(select * from banktrans where Cardnumber=@cardNumber))

    begin

       raiserror (‘有交易记录,不允许删除‘,18,3)

       rollback   --回滚记录

       return

    end

end

)修改触发器

--只要用户修改cardtable 中的数据,那么就在交易表中添加相应的交易记录

create trigger triggerCardTableupdate

on CardTable

for update

as

begin

--没有updated表,修改可以认为是先删除,再插入,所以老数据在deleted 新数据在inserted

    declare @cardNumber nchar(3),@beforeMoney money,@afterMoney money

    select @cardNumber = CardNumber from inserted

    select @beforeMoney=CardMoney from deleted

    select @afterMoney=CardMoney from inserted

    insert into banktrans( CardNumber, TransMoney)

    values(@cardNumber,@afterMoney-@beforeMoney)

end

实际使用中要考虑很多关系,只作简单演示。

触发器也可不用,直接写存储过程,再调用。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。