SQL Server数据库应用 第八章 存储过程和触发器.ppt
文本预览下载声明
4、触发器简介 5、创建触发器 6、管理触发器 触发器是一种特殊类型的存储过程 主要是通过事件进行触发而被执行的。(而存储过程可以通过存储过程名称而被直接调用) 触发器 触发器可以用于 SQL Server 约束、默认值和规则的完整性检查 当往一个表格中插入记录、修改记录或者删除记录时,SQL Server会自动执行触发器所定义的SQL语句,以保证数据的完整性 SQL Server 可以检查数据完整性的还有什么? 比如Check约束、默认值和规则等。但是与这些相比,触发器可以强制实现更加复杂的数据完整性,而且可以参考其他表的字段 触发器可以扩展 SQL Server 约束、默认值和规则的完整性检查逻辑,但只要约束和默认值提供了全部所需的功能,就应该使用约束和默认值 触发器的作用: 1、级联修改数据库中相关的表 2、执行比Check约束更复杂的约束操作。 3、拒绝或回滚违反引用完整性的操作。检查数据表的操作是否违反引用完整性,并选择相应的操作。 4、比较表修改前后数据之间的差别,并根据差别采取相应的操作。 触发器类型: 1、Update触发器:在表上执行更新操作时触发 2、Insert触发器:在表上执行插入操作时触发 3、Delete触发器:在表上执行删除操作时触发 按使得触发器发生的事件: 不执行插入、更新或删除操作,而是执行Instead of触发器的内容 1、INSTEAD OF触发器 2、AFTER触发器 仅在执行特定数据库操作(INSERT、UPDATE、DELETE)之后,触发器才被触发。可以指定多个触发器的触发顺序 按触发器发生的具体时间: 触发器主要优点: 1、触发器是自动的 2、触发器可以通过数据库中的相关表进行层叠更改。 3、触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂 创建触发器 ①CREATE TRIGGER 语句必须是批处理中的第一个语句。 ②创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。 ③触发器为数据库对象,其名称必须遵循标识符的命名规则。 ④虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。 ⑤虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。 ⑥ 创建一个触发器时必须指定: ⑴名称; ⑵在其上定义触发器的表; ⑶触发器将何时激发; ⑷激活触发器的数据修改语句。 创建触发器: 其语法形式如下: CREATE TRIGGER trigger_name ON{table|view} [WITH ENCRYPTION] {????{ { FOR | AFTER | INSTEAD OF } { [DELETE][,][ INSERT ] [ , ] [ UPDATE ] }????????[WITHAPPEND]????????[NOTFORREPLICATION]????????AS??????? {(FOR|AFTER|INSTEADOF){[INSERT][,]UPDATE}}????????[NOTFORREPLICATION]????????AS????????{IFUPDATE(column)????????[{AND|OR}UPDATE(column)]????????[...n]????????| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )????????{comparison_operator}column_bitmask[...n]????????} ????????sql_statement[...n] ????} } 例子:1、插入触发器 创建了一个触发器,在 Course 表上创建一个插入触发器,每插入一条数据,数据库系统会向用户返回一条信息,提示插入成功 Create Trigger Course_Insert on Course For insert as Print(OK,已经成功插入数据!) 2、删除触发器 创建了一个触发器,在 Course 表上创建一个删除触发器,若删除的记录为‘模拟电路’,则不能执行删除语句,并返回消息给用户。否则,执行删除 Create Trigger Course_Delete on Course For delete as Declare @Name [varchar](50) Select @Name = CName from Deleted if @Name =模拟电路‘ begin Print‘课程模拟电路不可以被删除 Rollback Transac
显示全部