触发器

触发器是实施数据库完整性控制的一种手段,它是一种特殊类型的存储过程。

它是在用户对表中的数据进行修改、插入或删除时,由系统自动调用,而不允许用户或程序通过名称调用。

触发器是基于一个表创建的,但是可以针对多个表进行操作。

在一个表中存在三种不同操作的触发器(insert、update、delete)

SQL server 2000按触发器激活的时机可以分为两种类型:after触发器和instead of触发器

after触发器又称为后触发器,该类触发器是在引起触发器执行的修改语句成功执行后被触发执行,如果修改语句执行失败,触发器将不会执行,此类触发器只能定义在表上,且可以为每个触发操作创建多个after触发器。注:该类触发器不能创建在视图上

instead of触发器又称为替代触发器,表示不执行引起触发器执行的修改语句,而只执行触发器本身。该类触发器既可在表上定义也可在视图上定义,但对于每个触发操作,只能定义一个instead of 触发器

Deleted表和Inserted表

在触发器执行过程中,SQL server 建立并管理两个临时表:Deleted表和Inserted表。这两个特殊表用户只能查询,而不能直接修改。

在执行insert语句时被添加的记录将存储在Inserted表中

在执行delete操作时,表中被删除的记录将存储在Deleted表中

在执行update时SQL server先将要进行修改的记录存储在Deleted表中,然后将修改后的记录存储在Inserted表中

eg.有如下两个表

表一:borrower

cardID      studentName    studentMajor

10010          李雷                   计科

10011         韩梅梅                 通信

10012          林涛                   网络

表二:loan

cardID        bookID           borrowTime

10010          1                 2009-12-7 9:45

10010          2                 2009-12-10 10:10

10011          3                 2009-12-20 14:56

要求:对表一创建一个instead of 触发器,当删除表一中的一行时,查看该卡号在表二中是否存在,若存在就不删除,若不存在则删除

 

 

create TRIGGER [dbo].[delete_trigger]
ON [dbo].[borrower] instead of delete
AS
BEGIN
declare @cardid int
select @cardid=cardID from deleted
delete borrower where cardID=@cardid and (select count(*) from loan where cardID=@cardid)=0

 

 

posted @ 2009-12-23 14:10  smileflower  阅读(428)  评论(0编辑  收藏  举报