- 19
- 0
- 约1.39万字
- 约 50页
- 2017-07-03 发布于湖北
- 举报
第8讲存储过程与触发器剖析
Deleted表和Inserted表 在触发器的执行过程中,SQL Server建立和管理两个临时的虚拟表:Deleted表和Inserted表。这两个表包含了在激发触发器的操作中插入或删除的所有记录。在执行INSERT或UPDATE语句之后所有被添加或被更新的记录都会存储在Inserted表中。 在执行DELETE或UPDATE语句时,从触发程序表中被删除的行会发送到Deleted表。 对于更新操作,SQL Server先将要进行修改的记录存储到Deleted表中,然后再将修改后的数据复制到Inserted表以及触发程序表。 为表customer创建一个名为test_tr的触发器,当执行添加、更新或删除时,激活该触发器。 创建test_tr触发器 CREATE TRIGGER test_tr ON customers FOR INSERT,UPDATE,DELETE AS SELECT * FROM inserted SELECT * FROM deleted customer表执行以下插入操作 INSERT INTO customer(CustomerID,CompanyName,Phone) VALUES(12346,张三,1234567) 例如,在 pubs 数据库里,存放着出版商 (publishers) 的信息、出版物的信息(titles)、出版 物与作者关联的信息 (titleauthor) 以及作者信息 (authors). 现在有一条出版商的信息被删除了, 则 所有由该出版商出版的出版物都应该将 pub_id 修改为 NULL,或者删除有关的出版物信息. 同样 titleauthor 表中的信息也应该相应的得到修改. 这 样关联到三张表的一致性维护问题,可以使用触发 器来实现. 设置 DELETE 触发器 大型数据库应用(SQL Server 2008) 又比如公司库存量(stock)必须保持在一 定水平以内. 用户可以设置一个触发器. 这样当 库存量超过标准时,就会向数据库管理员发送信 息以示警告. SQL Server 在有关触发器方面的功能非常 灵活、强大, 这是吸引数据库工程师选择使用 SQL Server 的重要原因之一. 在 SQL Server 中一张表可以有多个触发器. 触发器可以容纳非常复杂的 T-SQL 语句. 它是 一个独立的单元,作为一个事物来执行. 大型数据库应用(SQL Server 2008) 触发器的主要功能: ● 级联修改数据库的所有相关表. ● 撤销或回滚违反引用完整性的操作. ● 执行比检查约束(check)更复杂的约 束操作. ● 查找在数据修改前后的表状态之间的差 别,并根据差别分别采取相应的措施. ● 在一张表的同一类型的操作 (INSERT、 UPDATE 或 DELETE) 上设置多个 触发器,从而可以针对同样的修改语句执行不 同的多种操作. 大型数据库应用(SQL Server 2008) ● 表的拥有者处理触发器的权限不许转授. ● 可以在触发器中引用视图或临时表,但不 能在视图、临时表或系统表上创建触发器. ● 在执行修改语句时,触发器的执行是修改 语句事物的一部分. 所以,如果触发器执行不成 功,则整个修改事物将会回滚. ● 当使用约束、规则和默认值就可以实现预 定的数据完整性时,应优先考虑使用这三种措施. ● TRUNCATE TABLE 虽然在功能上与删 除操作类似, 但是它不会触发DELECT触发器运行. 大型数据库应用(SQL Server 2008) 注意 大型数据库应用(SQL Server 2008) 触发器的分类 触发器按照触发事件可分为3类,分别是数据操纵语言(DML)触发器、数据定义语言(DDL)触发器和数据库事件触发器,触发器作用见下表. 触发器用 CREATE 创建,DROP 删除, 用 ALTER 修改. 相应的操作也可以由 SSMS 进行. 创建触发器的语句必须写在批处理的第一行. 触发器是特殊的存储过程,所以适合于存储 过程的管理方式,都是适用于触发器. 所以可以 使用 sp_helptext, sp_help, sp_depends 等系统 存储过程. 大型数据库应用(SQL Server 2008) 2. 触发器的
原创力文档

文档评论(0)