instead of触发器

原创 2008年09月28日 11:51:00

INSTEAD OF触发器

   可以在表或视图上指定INSTEAD OF触发器。执行这种触发器就能够替代原始的触发动作。INSTEAD OF触发器扩展了视图更新的类型。对于每一种触发动作(INSERTUPDATE DELETE),每一个表或视图只能有一个INSTEAD OF触发器。

   INSTEAD OF触发器被用于更新那些没有办法通过正常方式更新的视图。例如,通常不能在一个基于连接的视图上进行DELETE操作。然而,可以编写一个INSTEAD OF DELETE触发器来实现删除。上述触发器可以访问那些如果视图是一个真正的表时已经被删除的数据行。将被删除的行存储在一个名为deleted的工作表中,就像AFTER触发器一样。相似地,在UPDATE INSTEAD OF触发器或者INSERT INSTEAD OF触发器中,你可以访问inserted表中的新行。

   不能在带有WITH CHECK OPTION定义的视图中创建INSTEAD OF触发器。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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

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

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

  1. /*在视图上定义 instead of insert 触发器以在一个或多个基表中插入数据。*/
  2. --部门表
  3. create table dept
  4. (
  5.     d_id int primary key,
  6.     d_name varchar(20)
  7. )
  8. --员工表
  9. create table emp
  10. (
  11.    e_id int primary key,
  12.    e_name varchar(20),
  13.    d_id int references dept(d_id)
  14. )
  15. if exists(select * from sysobjects where name='v')
  16. drop view v
  17. go
  18. create view v 
  19. as 
  20.     select e_id,e_name,d.d_id,d_name from emp e,dept d where e.d_id=d.d_id 
  21. go
  22. /*******************使用instead of 触发器******************/
  23. if exists(select * from sysobjects where name='de_em_insert')
  24. drop trigger de_em_insert
  25. go
  26. create trigger de_em_insert
  27. on v
  28. instead of insert
  29. as
  30. begin
  31.     if (not exists (select d.d_id from dept d, inserted i where d.d_id = i.d_id))
  32.      insert into dept select d_id,d_name from inserted
  33.    if (not exists (select e.d_id from emp e, inserted i where e.d_id = i.d_id))
  34.    insert into emp select e_id,e_name,d_id from inserted
  35. else
  36.    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
  37. end
  38. select * from v
  39. insert into v values(1001,'张珊',101,'销售部')
  40. select * from v
  41. select * from emp
  42. select * from dept

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

 

 

INSTEAD OF 触 发 器

 为什么要使用触发器     触发器的主要作用就是其能够实现由主键和外所不保证的复杂的参照完整性和数据的一致性。除此之外触发器还有其它许多不同的功能  触发器定义      触发器实际上是一种特殊的存...
  • zengzhengliang
  • zengzhengliang
  • 2006年04月29日 10:46
  • 8161

关于 INSTEAD OF 触发器

快生三星了,好歹也得在CSDN上留点什么以示水平不低吧,但总是不知道该写什么,只善于回答问题,不善于总结问题。近来在坛子上经常看到有问触发器的,而且大多是要求实现在一定条件下不向表中进行操作的触发器,...
  • qianjin036a
  • qianjin036a
  • 2011年01月13日 22:13
  • 10809

oracle INSTEAD OF 触发器

INSTEAD OF 触发器只作用于视图上,不能作用
  • feier7501
  • feier7501
  • 2014年04月07日 22:12
  • 812

SQL AFTER触发器和INSTEAD OF触发器的区别

原址:http://bbs.csdn.net/topics/300074591     by  qianjin036a-晴天 INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行IN...
  • zark721
  • zark721
  • 2017年04月23日 11:05
  • 573

after触发器和instead of 触发器的区别

AFTER 触发器(也叫“FOR”触发器)会在触发 insert、update 或是delect 动作之后执行。例如,一个 Employees 表上的 AFTER 触发器会在在 Employee 表上...
  • jim_won
  • jim_won
  • 2013年03月12日 13:40
  • 5296

触发器---FOR INSERT与INSTEAD OF

注:下面的实例由CSDN论坛MS-SQL server版块中internetcsdn (公元1979年8月10日) 网友提供测试一.--------------create table tb1 (id...
  • PPLUNCLE
  • PPLUNCLE
  • 2004年06月24日 16:06
  • 1791

使用 Oracle Instead of 触发器

今天在论坛上遇到个触发器的问题,需求如下:向一个表中插入一条新记录 如(2007 ,a)触发器  查询该表中如果有(2007 ,a)这条数据就更新这条数据中的另一个字段  如果没有就插入一条新记录触发...
  • sunyujia
  • sunyujia
  • 2007年09月27日 21:56
  • 5939

SQL触发器(AFTER和INSTEAD OF)

转自:http://www.cnblogs.com/shepherldeng/archive/2010/06/23/1763766.html 何为触发器:触发器是数据库服务器中发生事件时自动执行...
  • leamonjxl
  • leamonjxl
  • 2011年11月22日 11:22
  • 11000

6.SQL Server DML触发器--INSTEAD OF触发器

本文摘自《锋利的SQL》:http://item.jd.com/10380652.html 在前面讨论的一直都是AFTER触发器。INSTEAD OF在处理约束前激发,可以在INSTEA...
  • zhanghongju
  • zhanghongju
  • 2014年01月16日 21:09
  • 1718

Oracle Instead of 触发器的使用

我平时比较少用触发器,主要是因为程序逻辑不对的时候不容易发现错误,有时数据量大了也可能产生性能上的问题,但这个东西总有用武之地,在很多场合还是会起到巨大的作用。这两天就遇到一个问题,有两张表的一个字段...
  • aczhw1986
  • aczhw1986
  • 2010年09月10日 18:09
  • 541
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:instead of触发器
举报原因:
原因补充:

(最多只允许输入30个字)