instead of 触发器的用法

转载 2007年10月10日 18:30:00

 instead of 触发器的用法

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 触发器以便修改一个或多个基表中的数据。

【cocos2dx学习笔记】update函数的使用

声  明        本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时...
  • belcheck_1
  • belcheck_1
  • 2014年12月08日 10:04
  • 684

PostgreSQL UPDATE 中包含子查询的性能优化

摘要: 一位网友使用update t1 set info=(select info from t2 where t1.id=t2.id) where t1.id 一位网友使用update t1 ...
  • cicon
  • cicon
  • 2016年06月02日 12:54
  • 2128

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

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

sql语句中not in和exists 的用法以及更新两个表数据的插入实例

exists 与 in 最大的区别在于 in引导的子句只能返回一个字段,exists : 强调的是是否返回结果集,不要求知道返回什么,...
  • dxnn520
  • dxnn520
  • 2016年10月29日 14:37
  • 1541

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

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

NOLOGGING的正确用法

今天在看以前一些工作文档,发现有些DML脚本,用到了nologging的hint,即/*+NOLOGGING*/,这样写到底能不能减少日志量了??带着疑问,我做了以下测试: 1. 直接update,...
  • qinyu100
  • qinyu100
  • 2013年06月11日 23:44
  • 1710

MySQL Update语句用法

mysql5.6 支持explain update 之前的版本,explain 只支持select,但在最新的5.6版本中,支持explain update/delete 以下的文章主要介绍的...
  • duck_arrow
  • duck_arrow
  • 2013年01月22日 13:57
  • 709

多张表UPDATE用法

sql 语句多张表UPDATE用法 一、当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰。飞.飞Asp技术乐园 并且要注...
  • zyu67
  • zyu67
  • 2015年09月16日 16:18
  • 9690

基于curl的linux与windows通信服务搭建

一、环境准备windows:curl、json、base64、visual studio linux:自带的swgi模块、base64、json二、curl配置下载最新的curl版本:http:/...
  • l297969586
  • l297969586
  • 2017年12月26日 10:30
  • 89

【Android】AS环境下,在布局中使用android:gravity="left/right"提示使用start/end

1.问题产生   在AndroidStudio中,在布局文件中使用android:gravity属性设置属性值为left或right时,会有对应的警告提示,提示内容如下: Use "start...
  • u010963246
  • u010963246
  • 2017年02月20日 16:11
  • 373
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:instead of 触发器的用法
举报原因:
原因补充:

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