码迷,mamicode.com
首页 > 数据库 > 详细

sql触发器

时间:2014-10-29 17:19:48      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:ar   使用   for   sp   strong   数据   on   art   bs   

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

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

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

sql触发器

标签:ar   使用   for   sp   strong   数据   on   art   bs   

原文地址:http://my.oschina.net/ind/blog/338529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!