触发器实例after和instead of触发器的具体示例

触发器实例  时间:2021-08-26  阅读:()

SQL中触发器创建与调用

先给你举个触发器的实例: 先创建两个表 Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表 BorrowRecord int identity(1,1), --流水号 StudentID int , --学号 BorrowDate datetime, --借出时间 ReturnDAte Datetime, --归还时间 ... ) 创建触发器 Create Trigger truStudent On Student --在Student表中创建触发器 for Update --为什么事件触发,在这里就是修改的时候会执行这个触发器,一旦你修改Student表,就会执行 As --事件触发后所要做的事情 if Update(StudentID) begin Update BorrowRecord Set StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted临时表 Where br.StudentID=d.StudentID end

触发器事干什么的!有什么用呀?(菜鸟)

Chapter 32. 触发器 Table of Contents 32.1. 触发器行为概述 32.2. 数据改变的可视性 32.3. 用 C 写触发器 32.4. 一个完整的例子 本章描述如何书写触发器函数。

触发器函数可以用 C 或者任何其它可用的过程语言编写。

目前不可能用 SQL 语言书写触发器。

32.1. 触发器行为概述 一个触发器函数可以再一个INSERT,UPDATE, 或者 DELETE 命令之前或者之后执行,要么是对每个被修改的行一次, 要么是每条 SQL 一次。

如果发生触发器事件,那么将在合适的时刻调用触发器的函数以处理该事件。

触发器函数必须在创建触发器之前,作为一个没有参数并且返回trigger类型的函数定义。

(触发器函数通过特殊的 TriggerData 结构接收其输入,而不是用普通函数参数那种形式。

) 一旦创建了一个合适的触发器函数,触发器就用 CREATE TRIGGER 创建。

同一个触发器函数可以用于多个触发器。

有两种类型的触发器:按行触发的触发器和按语句触发的触发器。

在按行触发的触发器里, 触发器函数是为触发触发器的语句影响的每一行执行一次。

相比之下,一个按语句触发的触发器是在每执行一次合适的语句执行一次的, 而不管影响的行数。

特别是,一个影响零行的语句将仍然导致任何适用的按语句触发的触发器的执行。

这两种类型的触发器有时候分别叫做"行级别的触发器"和"语句级别的触发器"。

语句级别的 "before" 触发器通常在语句开始做任何事情之前触发, 而语句级别的 "after" 触发器在语句的最后触发。

行级别的 "before" 触发器在对特定行进行操作的时候马上触发, 而行级别的 "after" 触发器在语句结束的时候触发(但是在任何语句级别的 "after" 触发器之前)。

按语句触发的触发器应该总是返回 NULL。

如果必要,按行触发的触发器函数可以给调用它的执行者返回一表数据行(一个类型为 HeapTuple 的数值), 那些在操作之前触发的触发器有以下选择: 它可以返回 NULL 以忽略对当前行的操作。

这就指示执行器不要执行调用该触发器的行级别操作(对特定行的插入或者更改))。

只用于INSERT和UPDATE触发器: 返回的行将成为被插入的行或者是成为将要更新的行。

这样就允许触发器函数修改被插入或者更新的行。

一个无意导致任何这类行为的在操作之前触发的行级触发器必须仔细返回那个被当作新行传进来的同一行 (也就是说,对于 INSERT 和 UPDATE 触发器而言,是 NEW 行, 对于 DELETE 触发器而言,是 OLD 行)。

对于在操作之后触发的行级别的触发器,其返回值会被忽略,因此他们可以返回NULL。

如果多于一个触发器为同样的事件定义在同样的关系上, 触发器将按照由名字的字母顺序排序的顺序触发。

如果是事件之前触发的触发器,每个触发器返回的可能已经被修改过的行成为下一个触发器的输入。

如果任何事件之前触发的触发器返回 NULL 指针, 那么其操作被丢弃并且随后的触发器不会被触发。

通常,行的 before 触发器用于检查或修改将要插入或者更新的数据。

比如,一个 before 触发器可以用于把当前时间插入一个时间戳字段, 或者跟踪该行的两个元素是一致的。

行的 after 触发器多数用于填充或者更新其它表, 或者对其它表进行一致性检查。

这么区分工作的原因是, after 触发器肯定可以看到该行的最后数值, 而 before 触发器不能;还可能有其它的 before 触发器在其后触发。

如果你没有具体的原因定义触发器是 before 还是 after,那么 before 触发器的效率高些, 因为操作相关的信息不必保存到语句的结尾。

如果一个触发器函数执行 SQL 命令,然后这些命令可能再次触发触发器。

这就是所谓的级联触发器。

对级联触发器的级联深度没有明确的限制。

有可能出现级联触发器导致同一个触发器的递归调用的情况; 比如,一个 INSERT 触发器可能执行一个命令, 把一个额外的行插入同一个表中,导致 INSERT 触发器再次激发。

避免这样的无穷递归的问题是触发器程序员的责任。

在定义一个触发器的时候,我们可以声明一些参数。

在触发器定义里面包含参数的目的是允许类似需求的不同触发器调用同一个函数。

比如,我们可能有一个通用的触发器函数, 接受两个字段名字,把当前用户放在第一个,而当前时间戳在第二个。

只要我们写得恰当,那么这个触发器函数就可以和触发它的特定表无关。

这样同一个函数就可以用于有着合适字段的任何表的 INSERT 事件,实现自动跟踪交易表中的记录创建之类的问题。

如果定义成一个 UPDATE 触发器,我们还可以用它跟踪最后更新的事件。

每种支持触发器的编程语言都有自己的方法让触发器函数得到输入数据。

这些输入数据包括触发器事件的类型(比如,INSERT 或者 UPDATE)以及所有在 CREATE TRIGGER 里面列出的参数。

对于低层次的触发器,输入数据也包括 INSERT 和 UPDATE 触发器的 NEW 行,和/或 UPDATE 和 DELETE 触发器的 OLD 行。

语句级别的触发器目前没有任何方法检查改语句修改的独立行。

sql server行触发器怎么写,给个例子

假如有表course字段有courseid,coursename,studentid 假如有表studentinfo 字段有studenid,studentname,score 现要删除某一学生,用触发去自动删除course中该学生信息 create trigger deletecourse on studentinfo after delete begin delete from course where studentid in (select studentid from deleted) //deleted 为删除的那条数据 end go

那位能给我用SQL语言举几个关于存储过程,触发器的例子

SQL 的触发器 操作时有2个表 一个 deleted 表 这个表保存的数据就是操作前的数据 我想应该符合楼主要的 before 的结果AFTER 触发器在触发它们的语句完成后执行。

如果该语句因错误(如违反约束或语法错误)而失败,触发器将不会执行。

不能为视图指定 AFTER 触发器,只能为表指定该触发器。

可以为每个触发操作(INSERT、UPDATE 或 DELETE)指定多个 AFTER 触发器。

如果表有多个 AFTER 触发器,可使用 sp_settriggerorder 定义哪个 AFTER 触发器最先激发,哪个最后激发。

除第一个和最后一个触发器外,所有其它的 AFTER 触发器的激发顺序不确定,并且无法控制。

在 SQL Server 2000 中 AFTER 是默认触发器。

不能在 SQL Server 7.0 版或更早的版本中指定 AFTER 或 INSTEAD OF,这些版本中的所有触发器都作为 AFTER 触发器运行。

INSTEAD OF 该触发器代替触发操作执行。

可在表和视图上指定 INSTEAD OF 触发器。

只能为每个触发操作(INSERT、UPDATE 和 DELETE)定义一个 INSTEAD OF 触发器。

INSTEAD OF 触发器可用于对 INSERT 和 UPDATE 语句中提供的数据值执行增强的完整性检查。

INSTEAD OF 触发器还允许指定某些操作,使一般不支持更新的视图可以被更新。

after和instead of触发器的具体示例

普通触发器的例子 /wangzhiqing999/blog/item/126bdc0c7a7dd79b0a7b829d.html instead of触发器的例子 /wangzhiqing999/blog/item/2ae530e82db89b33269791a4.html (单表统计视图 目标:测试 通过触发器实现“可更新视图” 的部分)

HostKvm 黑色星期五香港服务器终身六折 其余机房八折

HostKvm商家我们也不用多介绍,这个服务商来自国内某商家,旗下也有多个品牌的,每次看到推送信息都是几个服务商品牌一起推送的。当然商家还是比较稳定的,商家品牌比较多,这也是国内商家一贯的做法,这样广撒网。这次看到黑五优惠活动发布了,针对其主打的香港云服务器提供终身6折的优惠,其余机房服务器依然是8折,另还有充值50美元赠送5美元的优惠活动,有需要的可以看看。HostKvm是一个创建于2013年的...

器安装环境和运维管理工具推荐

今天看到一个网友从原来虚拟主机准备转移至服务器管理自己的业务。这里问到虚拟主机和服务器到底有什么不同,需要用到哪些工具软件。那准备在下班之间稍微摸鱼一下整理我们服务器安装环境和运维管理中常见需要用到的软件工具推荐。第一、系统镜像软件一般来说,我们云服务器或者独立服务器都是有自带镜像的。我们只需要选择镜像安装就可以,比如有 Windows和Linux。但是有些时候我们可能需要自定义镜像的高级玩法,这...

趣米云月付460元,香港CN2云服务器VPS月付低至18元

趣米云早期为做技术起家,为3家IDC提供技术服务2年多,目前商家在售的服务有香港vps、香港独立服务器、香港站群服务器等,线路方面都是目前最优质的CN2,直连大陆,延时非常低,适合做站,目前商家正在做七月优惠活动,VPS低至18元,价格算是比较便宜的了。趣米云vps优惠套餐:KVM虚拟架构,香港沙田机房,线路采用三网(电信,联通,移动)回程电信cn2、cn2 gia优质网络,延迟低,速度快。自行封...

触发器实例为你推荐
程序设计模式设计模式是做什么的距离查询怎么可以知道与好友的距离组或资源的状态不是执行请求操作的正确状态无法启动承载网络,组或资源状态下不是执行请求操作的正确状态!余额宝收益走势图支付宝余额宝收益46块6,存了多少化学键理论价键理论和分子轨道理论的主要区别是什么查看加密空间怎么看加密的qq空间等保测评机构什么是三级等保体系 three-level阿里学院首页在阿里学院必须实名认证吗垂直型网站垂直型网站和平行型网站的区别云电视是什么意思云电视怎么用机顶盒看数字电视
国外vps 主机测评网 vmsnap3 腾讯云数据库 12u机柜尺寸 湖南服务器托管 dd444 宁波服务器 老左正传 美国免费空间 上海服务器 免费邮件服务器 smtp虚拟服务器 监控服务器 免费蓝钻 阿里云邮箱登陆 apnic tracker服务器 winserver2008r2 美国十大啦 更多