SQL : INSTEAD OF触发器的工作过程
可以在表或视图上指定INSTEAD OF触发器。执行这种触发器就能够替代原始的触发动作。INSTEAD OF触发器扩展了视图更新的类型。对于每一种触发动作(INSERT、UPDATE或 DELETE),每一个表或视图只能有一个INSTEAD OF触发器。
INSTEAD OF触发器被用于更新那些没有办法通过正常方式更新的视图。例如,通常不能在一个基于连接的视图上进行DELETE操作。然而,可以编写一个INSTEAD OF DELETE触发器来实现删除。上述触发器可以访问那些如果视图是一个真正的表时已经被删除的数据行。将被删除的行存储在一个名为deleted的工作表中,就像AFTER触发器一样。相似地,在UPDATE INSTEAD OF触发器或者INSERT INSTEAD OF触发器中,你可以访问inserted表中的新行。
不能在带有WITH CHECK OPTION定义的视图中创建INSTEAD OF触发器。
示例
在本例中,创建了一个德国客户表和一个墨西哥客户表。放置在视图上的INSTEAD OF触发器将把更新操作重新定向到适当的基表上。这时发生的插入是对CustomersGer表的插入而不是对视图的插入。
创建两个包含客户数据的表:
SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country = 'Germany'SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country = 'Mexico'GO
在该数据上创建视图:
CREATE VIEW CustomersView ASSELECT * FROM CustomersGerUNIONSELECT * FROM CustomersMexGO
创建一个在上述视图上的INSTEAD OF触发器:
CREATE TRIGGER Customers_Update2ON CustomersViewINSTEAD OF UPDATE ASDECLARE @Country nvarchar(15)SET @Country = (SELECT Country FROM Inserted)IF @Country = 'Germany'BEGINUPDATE CustomersGerSET CustomersGer.Phone = Inserted.PhoneFROM CustomersGer JOIN InsertedON CustomersGer.CustomerID = Inserted.CustomerIDENDELSEIF @Country = 'Mexico'BEGINUPDATE CustomersMexSET CustomersMex.Phone = Inserted.PhoneFROM CustomersMex JOIN InsertedON CustomersMex.CustomerID = Inserted.CustomerIDEND
通过更新视图,测试触发器:
UPDATE CustomersView SET Phone = ' 030-007xxxx' WHERE CustomerID = 'ALFKI'SELECT CustomerID, Phone FROM CustomersView WHERE CustomerID = 'ALFKI'SELECT CustomerID, Phone FROM CustomersGer WHERE CustomerID = 'ALFKI'
SQL : INSTEAD OF触发器的工作过程相关推荐
- SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数
– SQL SERVER 判断是否存在某个触发器.储存过程 – 判断储存过程,如果存在则删除 IF (EXISTS(SELECT * FROM sysobjects WHERE name='proce ...
- Oracle JOB 用法小结 用法 工作 过程 参数 job 执行 运行 SQL 指示 _中国网管联盟_bitsCN.com
一.设置初始化参数 job_queue_processes sql> alter system set job_queue_processes=n;(n>0) job_queue_proc ...
- PL/SQL -- INSTEAD OF 触发器
为什么80%的码农都做不了架构师?>>> --============================== -- PL/SQL --> INSTEAD OF 触发器 -- ...
- oracle 触发器 upsert,如何使SQLAlchemy insert与Postgres多处理proof upsert触发器一起工作?...
我有多处理应用程序,需要upsert(插入,如果存在更新)功能.在 我决定使用触发器解决方案来接近upsert.(为每个名为is_upsert的启用upsert的表添加额外的列,在触发器检查此字段时, ...
- XenApp的工作过程
XenApp工作原理 Citrix XenApp™作为一种Windows®应用交付系统,可在数据中心集中管理应用,并将应用按需交付给身处各地.使用各种设备的用户.利用集成的应用虚拟化技术,XenApp ...
- 如何使用SQL Server INSTEAD-OF触发器
如何使用SQL Server INSTEAD-OF触发器 触发器是类似于存储程序的数据库对象,它响应数据库环境下的某个请求.SQL Sever 2005包含3个触发器对象:AFTER,数据定义语言 ( ...
- 实验9 SQL Server 的触发器
实验9 SQL Server 的触发器 一.实验目的 1.了解触发器的触发过程和类型 2.通过执行SQL脚本,掌握创建触发器并测试触发器 3.掌握通过使用触发器维护数据完整性的方法. 二.实验要求 1 ...
- 第一百三十二期:MySQL系列:一句SQL,MySQL是怎么工作的?
当我们在mysql窗口或者数据库连接工具中输入一句sql后,我们就可以获取到想要的数据,这中间MySQL到底是怎么工作的呢? 作者:Java架构学习交流 对于MySQL而言,其实分为客户端与服务端. ...
- SQL Server:触发器详解
SQL Server:触发器详解 1. 概述 2. 触发器的分类 3. Inserted和Deleted表 4. 触发器的执行过程 5. 创建触发器 6. 修改触发器: 7. 删除触发器: 8. 查看 ...
- (计算机组成原理)第一章计算机系统概述-第二节:计算机硬件组成(存储器、运算器和控制器概述及计算机工作过程详解)
文章目录 一:计算机层次结构 (1)早期的冯诺依曼机 (2)现代计算机的组织结构 二:计算机硬件概述 (1)存储器 A:存储元.存储单元.存储体.存储字和存储字长 B:存储器的基本结构 (2)运算器 ...
最新文章
- 智源创新中心——与你同行,用AI改变世界
- JavaScript 开发者最期待的年度大会,惊喜不断,错过还要等好久!
- HashTree(哈希树) ——和trie类似,只是将字符换成了质数,sphinx用到了???...
- jquery的$.extent()方法的总结
- 湖南hp服务器虚拟化解决方案,HP刀片服务器虚拟化整合解决方案-20210729062411.docx-原创力文档...
- Hive的hiveserver2后台开启和关闭
- 用reposync 同步YUM源到本地,搭建本地YUM源服务器
- Java学习笔记1---JVM、JRE、JDK
- html用行为实现屏蔽快捷右键,html屏蔽各种快捷键
- fdfs-文件上传信息返回详情
- 华为2019校招笔试题之处理字符串(python版)
- android imageview 图片模糊,android – Imageview变得模糊
- 配对t检验的应用条件是什么_配对t检验在实际工作中的应用
- Thread-Specific Data(线程私有数据)
- 对人工智能的一点看法
- android顶部导航高度,快速实现顶端导航栏(ToolBar+TabLayout+Viewpager)
- 如何用小学生计算机来玩游戏,小学生一年级第一次玩电脑作文
- 手里有200万,如何理财
- 爬虫_app 4 app数据抓取入门
- 35岁+做互联网的你该何去何从呢?
热门文章
- jquery的keyup()事件案列——根据输入中文名称自动显示添加对应的拼音简写+时间戳
- 使用Inkscape制作网易云音乐LOGO
- 新型养老机构的“智安”神器 | ​钛颐康智慧养老物联网平台
- 求方程式ax2bxc0的根c语言,2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根
- 月关“历史网络小说第一人”:第四届橙瓜网络文学奖十佳历史大神
- python写法教程_Python的表达式写法
- 计算机硬件系统的五大组成部分是什么,硬件系统的五大组成部分
- C++中this与*this的区别
- Android中.this的意思
- 小程序window对象的探索