触发器

本文介绍了触发器作为数据库完整性控制手段的基本概念,包括其作为特殊存储过程的工作方式、触发时机及操作类型。详细解释了after触发器与insteadof触发器的区别,并通过示例展示了如何使用SQL Server创建insteadof触发器来实现复杂的数据操作逻辑。

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

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

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

在一个表中存在三种不同操作的触发器(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

 

 

转载于:https://www.cnblogs.com/smileflower/archive/2009/12/23/1630556.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值