instead of 触发器的用法

来源:互联网 发布:mysql 中文全文索引 编辑:程序博客网 时间:2024/05/21 13:56

 

INSTEAD OF 触发器的主要优点是可以使不能更新的视图支持更新。基于多个基表的视图必须使用    

       INSTEAD OF 触发器来支持引用多个表中数据的插入、更新和删除操作。INSTEAD OF 触发器的另一个优点是使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。

       Transact-SQL 语句创建两个基表、一个视图和视图上的 INSTEAD OF 触发器。以下表将个人数据和业务数据分开并且是视图的基表。

/*在视图上定义 instead of insert 触发器以在一个或多个基表中插入数据。*/

--部门表

create table dept

(

    d_id int primary key,

    d_name varchar(20)

)

--员工表

create table emp

(

   e_id int primary key,

   e_name varchar(20),

   d_id int references dept(d_id)

)


select * from emp


drop view v

create view v

as

select e_id,e_name,d.d_id,d_name from emp e,dept d where e.d_id=d.d_id


select * from v

 

insert into v values(1001,'张珊',101,'销售部')


/*******************使用instead of 触发器******************/

drop trigger de_em_insert

go

create trigger de_em_insert

on v

instead of insert

as

begin

    if (not exists (select d.d_id from dept d, inserted i where d.d_id = i.d_id))

     insert into dept select d_id,d_name from inserted


   if (not exists (select e.d_id from emp e, inserted i where e.d_id = i.d_id))

   insert into emp select e_id,e_name,d_id from inserted

else

   update emp set e_id = i.e_id,e_name = i.e_name from emp e, inserted i where e.d_id = i.d_id

end


       可以在视图或表中定义 INSTEAD OF DELETE 触发器,以代替 DELETE 语句的标准操作。通常,在视图上定义 INSTEAD OF DELETE 触发器以便在一个或多个基表中修改数据。  

       可在视图上定义 INSTEAD OF UPDATE 触发器以代替 UPDATE 语句的标准操作。通常,在视图上定义 INSTEAD OF UPDATE 触发器以便修改一个或多个基表中的数据。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/vigorlin/archive/2007/10/10/1818948.aspx

原创粉丝点击