for|after|instead of分别在什么情况下用啊?

问题描述:

for|after|instead of分别在什么情况下用啊?
希望能说多白话就说多白话,举点例子更好.
1个回答 分类:综合 2014-09-23

问题解答:

我来补答
FOR / AFTER 是一个:
完整写FOR AFTER,只不过 AFTER 可写可不写,一般省略掉了.
在用户执行数据操作之后,触发器触发,执行触发器代码.
不可以定义在视图上.
例如:
表1 (ID,NAME) 
表2 (ID,NAME)
当用户插入表1数据后,表2也被插入相同的数据 
CREATE TRIGGER TRI1
ON 表1
FOR INSERT
AS
INSERT INTO 表2 SELECT * FROM INSERTED
 
INSTEAD OF:在用户执行数据操作数据之前,触发器触发,执行触发器代码,不执行用户的操作
根据这个特性,INSTEAD OF 触发器可以为视图添加数据操作的功能.
例如:
表1 (ID,NAME)
表2 (ID,DATE)
视图: VIEW_ALL(表1.ID,表1.NAME,表2.DATE)
为 VIEW_ALL 视图添加INSERT操作
CREATE TRIGGER TRI2
ON VIEW_ALL
INSTEAD OF INSERT 
AS
BEGIN
INSERT INTO 表1 SELECT ID,NAME FROM INSERTED
INSERT INTO 表2 SELECT ID,DATE FROM INSERTED
END
 
 
更多详细资料可以看:
FOR | AFTER
AFTER 指定触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发.所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成.
如果仅指定 FOR 关键字,则 AFTER 为默认值.
不能对视图定义 AFTER 触发器.
 
INSTEAD OF
指定执行 DML 触发器而不是触发 SQL 语句,因此,其优先级高于触发语句的操作.不能为 DDL 或登录触发器指定 INSTEAD OF.
对于表或视图,每个 INSERT、UPDATE 或 DELETE 语句最多可定义一个 INSTEAD OF 触发器.但是,可以为具有自己的 INSTEAD OF 触发器的多个视图定义视图.
 
 
展开全文阅读
剩余:2000
下一页:请说清为什么