关于触发器的理解

触发器是一种特殊的存储过程,不是用户直接调用,而是通过对表的一些操作触发的,比如对某个表的insert,update,delete,如果我们在该表中定义了相应的触发器,那么触发器就会执行。

在SQL SERVER中,触发器分为两种,一是前触发器(instead of),另一种是后触发器(after or for).

它们的区别在于:

前触发器(instead of) 顾名思意,就是代替引起触发的操作,而去执行触发器里面定义的脚本.

例如:

定义表:create talbe a(id int,name varchar(20),create table b(id int,name varchar(20).

定义触发器:create trigger tri_a

                 on a  instead of insert

                 as

                 begin

                insert into b select * from inserted

                end

当我们执行 insert into a (id,name) values (1,'abc) 的时候,该语句就触发了定义在表的触发器,从而执行insert into b

select * from inserted ,而不去执行插入表a的操作。其中inserted是个虚拟表,存放在内存中,下面会有详细介绍。

后触发器(after or for),是指对表执行了insert,update,delete后,触发定义在表的触发器,执行触发器的脚本。

例如:

定义表:create table products(proid int identity(1,1),proname varchar(20),procount int ,unitprice decimal ,totalprice decimal )

定义触发器:create trigger computeTotalprice

               on products for insert

               as

               begin

               update products

               set  totalprice = procount * unitprice

               where proname in (select proname form inserted)

               end

当我们执行 insert into products (proname,procount,unitprice) values ('FOOD',10,4.5)后,就会触发定义在products表的触发器,该触发器是计算该商品的总价。

 

在以上的触发器的脚本中都用到了虚拟表,inserted,但是还有另一虚拟表deleted,下面总结这两个表的用途:

1.插入操作(Insert)

Inserted表有数据,Deleted表无数据

2.删除操作(Delete)

Inserted表无数据,Deleted表有数据

3.更新操作(Update)

Inserted表有数据(新数据),Deleted表有数据(旧数据)

 

总结:虽然触发器,本人在实践中用得比较少,

但是个人认为,

前触发器用在对某个表操作前,进行一些逻辑处理和判断,从而判断是否对该表进行相应的操作。

后触发器用在对某个表操作后,进行操作自身和其他表。

 

原文地址:http://www.cnblogs.com/sandyzhou/archive/2010/01/06/1640338.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值