2022年SQLServer触发器学习笔记 .pdf





《2022年SQLServer触发器学习笔记 .pdf》由会员分享,可在线阅读,更多相关《2022年SQLServer触发器学习笔记 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习好资料欢迎下载触发器一触发器是一种特殊的存储过程它不能被显式地调用而是在往表中插入记录更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。二SQL Server 为每个触发器都创建了两个专用表Inserted 表和 Deleted 表。这两个表由系统来维护它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行完成后与该触发器相关的这两个表也被删除。Deleted 表存放由于执行Delete 或 Update 语句而要从表中删除的所有行。Inserted 表存放由于执行Insert 或 Update 语句而要向表中插入的
2、所有行。三 Instead of 和 After 触发器SQL Server 提供了两种触发器Instead of 和 After 触发器。这两种触发器的差别在于他们被激活的操作Instead of 触发器用于替代引起触发器执行的T-SQL 语句。除表之外 Instead of 触发器也可以用于视图用来扩展视图可以支持的更新操作。After 触发器在一个Insert,Update 或 Deleted 语句之后执行进行约束检查等动作都在After触发器被激活之前发生。After触发器只能用于表。一个表或视图的每一个修改动作(insert,update 和 delete)都可以有一个instead
3、 of 触发器一个表的每个修改动作都可以有多个 After 触发器。INSTEAD OF 触发器被用于更新那些没有办法通过正常方式更新的视图。通常不能在一个基于连接的视图上进行DELETE 操作,可以编写一个INSTEAD OF DELETE触发器来实现删除。可以访问那些如果视图是一个真正的表时已经被删除的数据行,它将把删除的行存储在 deleted 临时表中。本次练习将通过具体的例子介绍如何使用INSTEAD OF 触发器,使读者掌握INSTEAD OF触发器的使用方法。向 student 表中插入数据时,检查学号是否存在于student表中,如存在则进行插入操作,否则就不插入,具体语句如下
4、所示:CREATE TRIGGER checkid ON dbo.student INSTEAD OF insert AS IF NOT EXISTS(SELECT*FROM dbo.student WHERE ID=(SELECT ID FROM INSERTED)BEGIN ROLLBACK TRANSACTION PRINT 要处理记录的学号不存在!END ELSE BEGIN INSERT NTO dbo.student select*from inserted 学习好资料欢迎下载PRINT 已经成功处理记录!END 执行以上代码后,然后,输入以下代码进行测试,代码如下:INSERT
5、INTO dbo.student VALUES(6,史琳达,女,20,006)四触发器的执行过程如果一个Insertupdate 或者 delete 语句违反了约束那幺After 触发器不会执行因为对约束的检查是在After 触发器被激动之前发生的。所以After 触发器不能超越约束。Instead of 触发器可以取代激发它的操作来执行。它在 Inserted 表和 Deleted 表刚刚建立其它任何操作还没有发生时被执行。因为 Instead of 触发器在约束之前执行所以它可以对约束进行一些预处理。五使用 T-SQL 语句来创建触发器基本语句如下create trigger trigge
6、r_name on table_name|view_name for|After|Instead of insert,update,delete as sql_statement 六删除触发器:基本语句如下drop trigger trigger_name 七:查看数据库中已有触发器:-查看数据库已有触发器use jxcSoftware go select*from sysobjects where xtype=TR-查看单个触发器exec sp_helptext 触发器名 八修改触发器:基本语句如下alter trigger trigger_name on table_name|view_n
7、ame for|After|Instead of insert,update,delete as sql_statement 1、触发器实例Create Table Student(-学生表StudentID int primary key,-学号.)Create Table BorrowRecord(-学生借书记录表BorrowRecord int identity(1,1),-流水号StudentID int,-学号BorrowDate datetime,-借出时间ReturnDAte Datetime,-归还时间.)文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R
8、6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI1
9、0F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6
10、L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N
11、5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:C
12、I10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 H
13、P6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC
14、7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8学习好资料欢迎下载用到的功能有:1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。这时候可以用到触发器。对于1,创建一个Update 触发器:Create Trigger truStudent On Student-
15、在 Student 表中创建触发器for Update-为什么事件触发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 理解触发器里面的两个临时的表:Deleted,Inserted。注意 Deleted 与 Inserted 分别表示触发事件的表“旧的一条记录”和“新的一条记录”
16、。一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:一个 Update 的过程可以看作为:生成新的记录到Inserted 表,复制旧的记录到Deleted 表,然后删除Student 记录并写入新纪录。对于 2,创建一个Delete 触发器Create trigger trdStudent On Student for Delete As Delete BorrowRecord From BorrowRecord br,Delted d Where br.StudentID=d.StudentID SQL 触发器实例2 USE Master GO IF EXISTS(SELEC
17、T NAME FROM SYSOBJECTS WHERE XTYPE=U AND NAME=卷烟文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:C
18、I10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 H
19、P6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC
20、7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码
21、:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9
22、 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2
23、ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8文档编码:CI10F3E8S6T9 HP6L6V4Y4Z2 ZC7N5R6Q4X8学习好资料欢迎下载库存表)DROP TABLE 卷烟库存表GO IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE XTYPE=U
24、AND NAME=卷烟销售表)DROP TABLE 卷烟销售表GO-业务规则:销售金额=销售数量*销售单价业务规则。CREATE TABLE 卷烟销售表(卷烟品牌VARCHAR(40)PRIMARY KEY NOT NULL,购货商VARCHAR(40)NULL,销售数量INT NULL,销售单价MONEY NULL,销售金额MONEY NULL)GO-业务规则:库存金额=库存数量*库存单价业务规则。CREATE TABLE 卷烟库存表(卷烟品牌VARCHAR(40)PRIMARY KEY NOT NULL,库存数量INT NULL,库存单价MONEY NULL,库存金额MONEY NULL)
25、GO-创建触发器,示例1/*创建触发器 T_INSERT_ 卷烟库存表,这个触发器较简单。说明:每当 卷烟库存表 发生INSERT 动作,则引发该触发器。触发器功能:强制执行业务规则,保证插入的数据中,库存金额=库存数量*库存单价。注意:INSERTED、DELETED 为系统表,不可创建、修改、删除,但可以调用。重要:这两个系统表的结构同插入数据的表的结构。*/IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE XTYPE=TR AND NAME=T_INSERT_ 卷烟库存表)DROP TRIGGER T_INSERT_ 卷烟库存表GO CREATE T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年SQLServer触发器学习笔记 2022 SQLServer 触发器 学习 笔记

限制150内