7. 删除和修改触发器
删除触发表时,触发器被随之删除。可以用DROP语句删除已定义的触发器。也可以使用ALTER TRIGGER语句修改触发器定义。删除已定义触发器的语句格式:
DROP TRIGGER [OWNER.] 触发器名 [,[OWNER.] 触发器名]
8. 触发器中可使用的特殊表:
使用触发器时,SQL Server提供了两张特殊的临时表: inserted表和deleted表。这两张表存在于高速缓存中,它们与创建触发器的表有相同的结构。
■ 用户可以使用该表检查某些修改操作的效果。
■ 但用户不能直接修改该表中的数据。
■ 用户可以使用该表的内容作为查询操作的判断条件,但要在FROM中写出使用的表名(inserted
或deleted)。
(1) inserted表:
存放被INSERTE和UPDATE的新数据。当向表中插入数据时,INSERT触发器被触发。新的记录增加到触发器表中和inserted表中。inserted表是一个逻辑表,保存了所插入记录的拷贝,触发器可以检查inserted表,来确定该触发器的操作是否应该执行和如何执行。
(2)deleted表:存放被DELETE和UPDATE的旧数据。当触发一个DELETE触发器时,被删除的记录放在一个特殊的deleted表中。deleted表是一个逻辑表,用来保存已经从表中删除的记录。DELETE触发器可以参考deleted表中的数据。
(3)UPDATE触发器可使用deleted表和inserted表修改一条记录等于删除一条旧记录和插入一条新记录。UPDATE可以看成是由DELETE语句和
INSERT 语句组成。当在一个有UPDATE触发器的表上修改一条记录时,表中原来的记录移动到deleted表中,修改过的记录插入到inserted表中。
UPDATE触发器可以参考deleted表和inserted表,以便确定如何执行触发器的操作。
9. 使用触发器的考虑o
■ 对于每个数据操作语句,无论它影响一行还是多行,对同一个触发器都只能激活一次。
■ 触发器最大的用途是维护数据完整性,而不是返回结果。
■ 只是在必要的时候使用触发器。如果使用约束,规则,默认就可以实现预定的数据完整性时,应优先考虑使用这3种措施。
■ 使触发器的定义语句尽可能清晰简单。
■ 触发器在操作发生之后执行,约束在操作发生之前起作用。如果在触发器表上有约束,那么这些约束在触发器执行之前进行检查。如果操作与约束有冲突,那么触发器不执行。
■ 触发器不能在临时表或视图上创建,但可以参照这些对象。
■ 触发器和激活它的语句作为单个事务处理,如果检查到严重错误,整个事务自动撤销。
|