第7章 存储过程与触发器_第1页
第7章 存储过程与触发器_第2页
第7章 存储过程与触发器_第3页
第7章 存储过程与触发器_第4页
第7章 存储过程与触发器_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、返回返回 第第7章存储过程与触发器章存储过程与触发器 返回返回 本章内容本章内容 7.1 存储过程1 7.2 触发器3 2 返回返回 7.1.1 存储过程概述 使用SQL Server创建应用程序时,T-SQL编程语言是应用程 序和SQL Server数据库之间的主要编程接口。使用T-SQL程序 时,可用两种方法存储和执行程序:1)可以将程序存储在本 地,并设计向SQL Server发送命令并处理结果的应用程序。2) 也可以将程序以存储过程形式存储在SQL Server服务器中,并 创建执行存储过程并处理结果的应用程序。 1 1、存储过程基本知识、存储过程基本知识 SQL Server中的存储

2、过程与其它编程语言中的过程类似, 可以使用 T-SQL EXECUTE 语句来运行存储过程。存储过程与 函数不同,因为存储过程不返回取代其名称的值,也不能直接 在表达式中使用。 返回返回 7.1.1 存储过程概述 在SQL Server中使用存储过程而不使用存储在客户端计算 机本地的T-SQL程序的好处包括: 1)存储过程具有安全特性(例如权限)和所有权链接,以 及可以附加到它们的证书。用户可以被授予权限来执行存储 过程而不必直接对存储过程中引用的对象具有权限; 2)存储过程允许模块化程序设计。存储过程一旦创建,以 后即可在程序中调用任意多次。这可以改进应用程序的可维 护性,并允许应用程序统一

3、访问数据库; 3)存储过程可以减少网络通信流量。一个需要数百行T- SQL代码的操作可以通过一条执行过程代码的语句来执行,而 不需要在网络中发送数百行代码。 返回返回 7.1.1 存储过程概述 2 2、存储过程的类型、存储过程的类型 在SQL Server 2005中有多种可用的存储过程,主要有用户 定义的存储过程、扩展存储过程、系统存储过程。 系统存储过程系统存储过程 SQL Server 2005中的许多管理活动都是通过一种特殊的 存储过程执行的,这种存储过程被称为系统存储过程。例如, sys.sp_changedbowner就是一个系统存储过程。从物理意义上 讲,系统存储过程存储在源数据

4、库中,并且带有sp_前缀。从逻 辑意义上讲,系统存储过程出现在每个系统定义数据库和用户 定义数据库的sys构架中。在SQL Server 2005中,可将GRANT、 DENY和REVOKE权限应用于系统存储过程。 返回返回 存储过程创建事项存储过程创建事项: : create procedurecreate procedure语句不能与其他语句不能与其他SQLSQL语语 句在单个批处理中组合使用句在单个批处理中组合使用. . 在存储过程内在存储过程内, ,如果用于语句的对象名没如果用于语句的对象名没 有限定架构有限定架构, ,则架构将默认为该存储过程则架构将默认为该存储过程 的架构的架构.

5、. 执行存储过程执行存储过程, ,可以使用可以使用EXECUTEEXECUTE语句语句, ,如如 果存储过程是批处理中的第一条语句果存储过程是批处理中的第一条语句, ,那那 么不使用么不使用EXECUTEEXECUTE关键字也可以执行存储关键字也可以执行存储 过程过程. . 7.1.1 存储过程概述 返回返回 7.2 DML 触发器 7.2.1 DML 触发器概述触发器概述 7.2.2 设计设计DML触发器触发器 7.2.3 实现和管理实现和管理 DML 触发器触发器 返回返回 7.2.1 DML 触发器概述 DML触发器是当数据库服务器中发生数据操作语言(DML)事 件时要执行的操作。DML

6、事件包括对表或视图发出的UPDATE、 INSERT或DELETE语句。 1 1、了解、了解 DMLDML触发器触发器 SQL Server 2005提供了两种主要机制来强制执行业务规则 和数据完整性:约束和触发器。触发器是一种特殊的存储过程, 它在执行语言事件执行时自动生效。 当数据库中发生数据操作语言(DML)事件时将调用 DML 触 发器。DML事件包括在指定表或视图中修改数据的INSERT语句、 UPDATE语句或DELETE语句。DML触发器可以查询其它表,还可 以包含复杂的T-SQL语句。将触发器和触发它的语句作为可在 触发器内回滚的单个事务对待。如果检测到错误,则整个事务 即自动

7、回滚。 返回返回 7.2.1 DML 触发器概述 DML触发器在以下方面非常有用: 1)DML触发器可通过数据库中的相关表实现级联更 改。不过,通过级联引用完整性约束可以更有效地 进行这些更改; 2)DML触发器可以防止恶意或错误的INSERT、 UPDATE以及DELETE操作,并强制执行比CHECK约束定 义的限制更为复杂的其它限制。与CHECK约束不同, DML触发器可以引用其它表中的列。例如,触发器可 以使用另一个表中的SELECT比较插入或更新的数据, 以及执行其它操作,如修改数据或显示用户定义错 误信息; 3)DML触发器可以评估数据修改前后表的状态,并 根据该差异采取措施。 返回

8、返回 7.2.1 DML 触发器概述 2 2、DML DML 触发器的类型触发器的类型 1)AFTER触发器:在执行了INSERT、UPDATE或DELETE语句 操作之后执行AFTER触发器。指定AFTER与指定FOR相同,它是 SQL Server早期版本中唯一可用的选项。AFTER触发器只能在 表上指定。 2)INSTEAD OF触发器:执行INSTEAD OF触发器代替通常的 触发动作。还可为带有一个或多个基表的视图定义INSTEAD OF 触发器,而这些触发器能够扩展视图可支持的更新类型。 返回返回 7.2.2 设计DML触发器 指定指定DMLDML触发器何时激发触发器何时激发 1)

9、AFTER 触发器将在处理触发操作(INSERT、 UPDATE或DELETE)、INSTEAD OF 触发器和约束之后 激发。 2)INSTEAD OF将在处理约束前激发,以替代触发操 作。如果表有AFTER触发器,它们将在处理约束之后 激发。如果违反了约束,将回滚INSTEAD OF触发器操 作并且不执行 AFTER 触发器; 3)每个表或视图针对每个触发操作(UPDATE、 DELETE和INSERT)可有一个相应的 INSTEAD OF 触发 器。而一个表针对每个触发操作可有多个相应的 AFTER触发器。 返回返回 7.2.2 设计DML触发器 3 3、DMLDML触发器执行触发器执行

10、 如果违反了约束,则永远不会执行AFTER触发器;因此,这些触发 器不能用于任何可能防止违反约束的处理。 为表定义的INSTEAD OF触发器对此表执行一条通常会再次激发该触 发器的语句时,不会递归调用该触发器,而是如同表中没有INSTEAD OF 触发器那样处理该语句,该语句将启动一系列约束操作和 AFTER 触发 器执行。例如,如果DML触发器定义为表的 INSTEAD OF INSERT 触发器 且该触发器对同一个表执行INSERT语句,则INSTEAD OF触发器执行的 INSERT 语句不会再次调用该触发器。该触发器执行的INSERT将启动用 于执行约束操作的进程和触发为该表定义的所

11、有AFTER INSERT 触发器 的进程。为视图定义的INSTEAD OF 触发器其执行逻辑与表上情况相似。 返回返回 7.2.2 设计DML触发器 4 4、设计、设计INSTEAD OF INSTEAD OF 触发器触发器 INSTEAD OF触发器的主要优点是可以使不能更新的视图支持更新。基于 多个基表的视图必须使用INSTEAD OF触发器来支持引用多个表中数据的插 入、更新和删除操作。 返回返回 7.2.2 设计DML触发器 在下列T-SQL 语句序列中,INSTEAD OF触发器更新视图中的两个基表。 另外,显示以下处理错误的方法:1)忽略对Person表的重复插入,并且 插入的信

12、息将记录在 PersonDuplicates 表中;2)将对EmployeeTable的 重复插入转变为 UPDATE 语句,该语句将当前信息检索至EmployeeTable, 而不会产生重复键冲突。 T-SQL语句创建两个基表、一个视图、一个记录错误表和视图上的 INSTEAD OF触发器。以下表将个人数据和业务数据分开并且是视图的基表。 CREATE TABLE Person(SSN char(11) PRIMARY KEY,Name nvarchar(100),Address nvarchar(100),Birthdate datetime) CREATE TABLE EmployeeT

13、able(EmployeeID int PRIMARY KEY,SSN char(11) UNIQUE, Department nvarchar(10),Salary money,CONSTRAINT FKEmpPer FOREIGN KEY (SSN) REFERENCES Person (SSN) 下面的视图使用某个人的两个表中的所有相关数据建立报表。 CREATE VIEW Employee AS SELECT P.SSN as SSN,Name,Address,Birthdate, EmployeeID,Department,Salary FROM Person P,EmployeeT

14、able E WHERE P.SSN=E.SSN 可记录对插入具有重复的社会保障号的行的尝试。PersonDuplicates 表记录插入的值、尝试插入的用户的姓名和插入的时间。 返回返回 7.2.2 设计DML触发器 CREATE TABLE PersonDuplicates(SSN char(11),Name nvarchar(100),Address nvarchar(100),Birthdate datetime,InsertSNAME nchar(100),WhenInserted datetime) INSTEAD OF 触发器将行插入到单个视图的多个基表中。在PersonDupl

15、icates表中记录了插 入具有重复社会保障号的行的尝试。EmployeeTable 中的重复行将更改为更新语句。 CREATE TRIGGER IO_Trig_INS_Employee ON Employee INSTEAD OF INSERT AS BEGIN SET NOCOUNT ON - 检查人员重复情况,不重复则插入 IF (NOT EXISTS (SELECT P.SSN FROM Person P,inserted I WHERE P.SSN=I.SSN) INSERT INTO Person SELECT SSN,Name,Address,Birthdate FROM ins

16、erted ELSE -重复则日志记录于“人员重复表”中 INSERT INTO PersonDuplicates SELECT SSN,Name,Address,Birthdate,SUSER_SNAME(),GETDATE() FROM inserted - 检查雇员重复情况,不重复则插入 IF (NOT EXISTS (SELECT E.SSN FROM EmployeeTable E, inserted WHERE E.SSN=inserted.SSN) INSERT INTO EmployeeTable SELECT EmployeeID,SSN, Department, Salar

17、y FROM inserted ELSE -重复则改为对表EmployeeTable做修改操作 UPDATE EmployeeTable SET EmployeeID = I.EmployeeID,Department = I.Department,Salary = I.Salary FROM EmployeeTable E, inserted I WHERE E.SSN = I.SSN END 返回返回 7.2.3 实现和管理 DML 触发器 (2)(2)使用包含使用包含 COMMITCOMMIT或或ROLLBACK TRANSACTIONROLLBACK TRANSACTION的的DMLD

18、ML触发器触发器 在SQL Server 2005和SQL Server 2000中,如果在触发器中执行 COMMIT TRANSACTION或COMMIT WORK语句,并且在触发器启动时没有对应 的显式或隐式BEGIN TRANSACTION语句。建议不要将COMMIT TRANSACTION 或COMMIT WORK语句放置在触发器中。 当包含ROLLBACK TRANSACTION语句的触发器在批处理中执行时,它们 会取消整个批处理。在SQL Server 2005 中,也会返回错误。 例7-10 本例中,如果 INSERT语句触发了包含ROLLBACK TRANSACTION 的DM

19、L触发器,则DELETE语句将由于批处理被取消而无法执行: /*开始批处理*/ INSERT employee VALUES (XYZ12345M,New,M,Employee,1,1,9952,6/1/95) - INSERT命令引发触发器而回滚,下面的DELETE命令无法执行 DELETE employee WHERE emp_id=PMA42628M 返回返回 7.2.3 实现和管理 DML 触发器 (3)(3)使用插入的和删除的表使用插入的和删除的表 DML 触发器语句使用两种特殊的表:删除的表和插入的表。SQL Server 2005 会自动创建和管理这两种表。您可以使用这两种驻留内

20、存的 临时表来测试特定数据修改的影响以及设置 DML 触发器操作条件。在 DML 触发器中,插入的和删除的表主要用于执行以下操作:1)扩展表之 间的引用完整性;2)在以视图为基础的基表中插入或更新数据;3)检查 错误并采取相应的措施;4)找出数据修改前后表的状态差异并基于该差 异采取相应的措施。 删除的表用于存储 DELETE和UPDATE 语句所影响的行的副本。在执行 DELETE或UPDATE 语句的过程中,行从触发器表中删除,并传输到删除的 表中。删除的表和触发器表通常没有相同的行。 插入的表用于存储 INSERT和UPDATE 语句所影响的行的副本。在插入 或更新事务期间,新行将同时被

21、添加到插入的表和触发器表。插入的表中 的行是触发器表中的新行的副本。 更新事务类似于在删除操作之后执行插入操作;首先,旧行被复制到 删除的表中,然后,新行被复制到触发器表和插入的表中。 在设置触发器条件时,应使用激发触发器的操作相应的插入的和删除 的表。尽管在测试 INSERT 时引用删除的表或在测试 DELETE 时引用插入 的表不会导致任何错误,但在这些情况下,这些触发器测试表将不包含任 何行。 返回返回 7.2.3 实现和管理 DML 触发器 传递给为表定义的INSTEAD OF触发器的插入的和删除的表 与传递给AFTER触发器的插入的和删除的表遵守相同的规则。 插入的和删除的表的格式与

22、在其上定义INSTEAD OF触发器的表 的格式相同。插入的和删除的表中的每一列都直接映射到基表 中的列。 当INSERT、UPDATE或DELETE 语句引用具有INSTEAD OF触 发器的视图时,SQL Server 2005 Database Engine将调用该 触发器,而不是对任何表采取任何直接操作。即使插入的和删 除的表中为该视图生成的信息格式不同于基表中的数据格式, 触发器也必须使用插入的和删除的表中的信息来生成实现基表 中请求的操作所需的任何语句。 返回返回 7.2.3 实现和管理 DML 触发器 2 2、使用、使用 INSTEAD OF INSTEAD OF 触发器触发器

23、INSTEAD OF 触发器替代下列触发语句的标准操作: INSERT、UPDATE或DELETE。可以定义 INSTEAD OF 触发器以 对一个或多个列执行错误或值的检查,然后在插入记录之前 执行其它操作。例如,当在工资表中小时工资列的更新值超 过指定值时,可以将触发器定义为产生错误消息并回滚该事 务,或在将记录插入工资表中之前将新记录插入到审核记录。 可以为表或视图定义INSTEAD OF触发器;但是,INSTEAD OF 触发器对扩展视图支持的更新类型最有用。例如, INSTEAD OF 触发器能够提供逻辑来通过视图修改多个基表, 或修改包含以下列的基表:timestamp数据类型、计

24、算列、标 识列。以下举例说明: 可以为视图或表定义INSTEAD OF INSERT触发器来替换 INSERT语句的标准操作。 返回返回 7.2.3 实现和管理 DML 触发器 例7-14 下面先来看一个例子。在KCGL数据库中的表tccprck上定义了一个instead of INSERT触发器tr_tccprck_i_instead_of,其内容为: CREATE TRIGGER tr_tccprck_i_instead_of ON dbo.tccprck instead of INSERT AS BEGIN SET NOCOUNT ON; -可能是新类型,要先插入到实时库存表中,以便在A

25、FTER触发器中自动更新库存。 insert into tccpsskc(dl,gg,cz1,cprk,cpck,cpkc,dj) - tccpsskc为产品 实时库存表 select tt.dl,tt.gg,tt.cz1,0,0,0,tt.dj from (select dl,gg,cz1,dj from inserted group by dl,gg,cz1,dj) as tt where (tt.dl+tt.gg+tt.cz1) not in (select dl+gg+cz1 from tccpsskc); - 代替插入操作后,这里需要准备一条插入命令 insert into tccp

26、rck(dl,gg,cz1,dw,fhqx,dj,rq,crkz,jbr)-tccprck为产品 入出库表 select dl,gg,cz1,dw,fhqx,dj,rq,crkz,jbr from inserted ; -本插入命令将引发tccprck表上的AFTER触发器 tr_tccprck_i END - 说明:KCGL数据库表及其含有的触发器,请参阅第12章设计实现的应用系 统数据库。 通常会为视图定义INSTEAD OF INSERT触发器以在一个或多个基表中插入数据。 返回返回 7.2.3 实现和管理 DML 触发器 3 3、修改和重命名、修改和重命名DMLDML触发器触发器 如果

27、必须修改DML触发器的定义,则删除和重新创建触发 器或重新定义现有触发器均可一步完成。如果更改了DML触发 器引用的对象名,则必须修改触发器以使其文本反映新的名 称。因此,在重命名对象前,首先显示该对象的依赖关系, 以确定所建议的更改是否会影响任何触发器。 也可以重命名触发器。新名称必须遵守标识符规则。您只 能重命名自己拥有的触发器,而数据库所有者可以更改任意 用户的触发器名称。需重命名的触发器必须位于当前数据库 中。也可以修改DML触发器以加密其定义。 修改触发器:ALTER TRIGGER;重命名触发器:sp_rename; 查看触发器的依赖关系:sp_depends。 注意:重命名触发器

28、并不会更改它在触发器定义文本中的 名称。要在定义中更改触发器的名称,应直接修改触发器。 返回返回 7.2.3 实现和管理 DML 触发器 5 5、删除和禁用触发器、删除和禁用触发器 当不再需要某个触发器时,可将其禁用或删除。 禁用触发器不会删除该触发器。该触发器仍然作为对象存 在于当前数据库中。但是,当执行任意 INSERT、UPDATE或 DELETE 语句(在其上对触发器进行了编程)时,触发器将不 会激发。已禁用的触发器可以被重新启用。启用触发器会以 最初创建它时的方式将其激发。默认情况下,创建触发器后 会启用触发器。 删除了触发器后,它就从当前数据库中删除了。它所基于 的表和数据不会受到

29、影响。删除表将自动删除其上的所有触 发器。删除触发器的权限默认授予在该触发器所在表的所有 者。禁用触发器命令为:DISABLE TRIGGER 、ALTER TABLE; 启用触发器命令为:ENABLE TRIGGER、ALTER TABLE;删除触 发器命令为:DROP TRIGGER。 如下为禁用触发器的命令:DISABLE TRIGGER tr_tccprck_i_instead_of on tccprck 返回返回 练习题7 一、选择题 1、关于存储过程的描述正确的一项是:_。 A、存储过程的存在独立于表,它存放在客户端,供客户使用 B、存储过程只是一些T-SQL语句的集合,不能看作S

30、QL Server的对象 C、存储过程可以使用控制流语句和变量,大大增强了SQL的功能 D、存储过程在调用时会自动编译,因此使用方便 2、关于触发器叙述正确的是:_。 A、触发器是自动执行的,可以在一定条件下触发 B、触发器不可以同步数据库的相关表进行级联更改 C、SQL Server 2005不支持DDL触发器 D、触发器不属于存储过程 二、简答题 1、什么是存储过程?SQL Server提供了3种存储过程,它们分别是什么? 2、请写出执行存储过程的几种最常用的方式,至少列出3种。 3、什么是触发器?存储过程与触发器有什么联系与区别? 4、在有些情况下,为什么需要重新编译存储过程? 5、SQ

31、L Server 2005提供的3种重新编译存储过程的方法是什么? 6、存储过程和触发器的作用是什么?使用它们有什么好处? 7、SQL Server 2005中提供了2种类型的触发器,分别是什么? 8、DDL触发器是SQL Server 2005新增的触发器类型,请叙述一下它的特点。 9、触发器的主要作用在于实施什么类型的数据库完整性? 10、能否在当前库中为其它库创建触发器? 11、创建一触发器,当修改表S时,显示“学生信息表被修改了”。 12、为teacher表建立添加和删除触发器,实现department表教师人数的自动更新。 注意,正在任课的教师数据不能删除。 13、给数据库KCGL创

32、建存储过程,用来输出产品的名称、价格和生产厂商。 返回返回 上机实习7 实验目的实验目的 1)了解SQL Server 2005中存储过程和触发器(包括DML触 发器和DDL触发器)的基本概念;2)实践存储过程和触发器 的设计、实现和管理、使用、修改与删除等的操作。 实验内容实验内容 1 1、创建与使用存储过程方法与示例、创建与使用存储过程方法与示例 (1 1)创建存储过程)创建存储过程 1 1)利用)利用Management Studio创建存储过程创建存储过程 在对象资源管理器中,依次展开数据库服务器-数据库- 某数据库-可编程性-存储过程,在“存储过程”节点上, 按鼠标右键,从弹出的快捷

33、菜单中选择“新建存储过程”菜 单项,在出现的“新建存储过程”的创建对话框中,可直接 输入存储过程代码。 2 2)利用模板创建存储过程)利用模板创建存储过程 在模板资源管理器中,展开“Stored Procedure”-双击 某创建存储过程项,如“Create Procedure Basic Template”。经过正确连接后,在模板代码窗口中修改完成 存储过程的创建。 返回返回 上机实习8 3 3)利用)利用create procedurecreate procedure语句能创建存储过程。语句能创建存储过程。 例例7-20 7-20 定义具有参数的存储过程。在JXGL数据库中,创建一 个名称

34、为InsRecToS的存储过程,该存储过程的功能是向S表中 插入一条记录,新记录的值由参数提供,如果未提供值给sex 时,由参数的默认值代替。 CREATE PROCEDURE InsRecToS(sno char(5),sn varchar(8),sex char(2)=男,age int,dept varchar(20) AS INSERT INTO S VALUES(sno,sn,sex,age,dept) GO Execute InsRecToS sno=S8,sn=罗兵 ,age=18,dept=信息 -执行该存储过程 例例7-21 7-21 定义能够返回值的存储过程。在JXGL数据

35、库中创建一 个名称为Query_S的存储过程。该存储过程的功能是从数据表S 中根据学号查询某一学生的姓名和年龄,并返回。 CREATE PROCEDURE Query_S(Sno char(5),SN varchar(8) OUTPUT,Age smallint OUTPUT) AS SELECT sn=sn,age=age FROM S WHERE Sno=Sno 返回返回 上机实习8 (2)执行存储过程)执行存储过程 图图7-1 存储过程的执行存储过程的执行 图图7-2 存储过程修改窗口存储过程修改窗口 Query_S存储过程可以通过以下方法执行:(如图9-1所示) Declare SN

36、VARCHAR(8); Declare AGE SMALLINT execute Query_S S1,SN OUTPUT,AGE OUTPUT; SELECT SN,AGE - 执行语句还可以是:execute Query_S S1,SN=SN OUTPUT, AGE =AGE OUTPUT - 或 - execute Query_S S1,AGE =AGE OUTPUT,SN=SN OUTPUT - 或 - exec Query_S S1,SN OUTPUT,AGE OUTPUT。 - 如果该过程是批处理中的第一条语句,则可使用:Query_S S1,SN OUTPUT,AGE OUTPU

37、T或Query_S S1,SN=SN OUTPUT, AGE =AGE OUTPUT 等方 法执行。 返回返回 上机实习8 (3 3)查看和修改存储过程)查看和修改存储过程 在对象资源管理器中,依次展开数据库服务器-数据库-某数据库-可 编程性-存储过程,在某存储过程,如“InsRecToS”上按鼠标右键,从 弹出的快捷菜单中,选择各功能菜单操作。按“编写存储过程脚本为”或 “修改”可以查看并修改存储过程(如图7-2所示);按“重命名”能修改 存储过程名;按“删除”能删除不需要的存储过程;其它操作功能还有: 新建存储过程、执行存储过程、查看存储过程、查看存储过程属性等。 例7-22-22 使用

38、ALTER PROCEDURE命令,修改存储过程InsRecToS,命令如下: ALTER PROCEDURE dbo.InsRecToS (sno char(5),sn varchar(8),sex char(2)=女,age smallint,dept varchar(20) AS INSERT INTO S VALUES(sno,sn,sex,age,dept) (4 4)查看、重命名和删除存储过程)查看、重命名和删除存储过程 查看、重命名和删除存储过程交互式操作类似如上“(3)查看和修改存查看和修改存 储过程储过程”所述,这里通过命令来举例说明与操作。 例例7-237-23 查看数据库

39、JXGL中存储过程InsRecToS的源代码。 exec sp_helptext InsRecToS 返回返回 上机实习8 2 2、创建与使用触发器、创建与使用触发器方法与示例方法与示例 (1 1)创建触发器)创建触发器 1 1)利用)利用Management Studio创建与修改触发器创建与修改触发器 在对象资源管理器中,依次展开数据库服务器-数据库-某数据库-表-某表, 如S表-展开点击触发器-在某触发器上,按鼠标右键,如图7-3所示。点击“新建 触发器”。在出现的模板代码窗口中,修改或输入触发器脚本,如图7-4所示,触发 器脚本准备完成后。按 工具按钮或按F5运行完成创建触发器。 从弹

40、出的快捷菜单中,选择各功能菜单能完成:按“编写触发器脚本为”或 “修改”可以查看并修改触发器;按“删除”能删除不需要的触发器;按“禁 用”或“启用”能控制触发器是否生效;其它操作功能还有查看依赖关系、刷 新等。 图7-3 新建触发器快捷菜单 图7-4 新建触发器代码窗口 返回返回 上机实习8 2 2)利用)利用create triggercreate trigger语句能创建触发器语句能创建触发器 例7-26-26 对表S创建update触发器TR_S_Age_update。 create trigger TR_S_Age_update on S for update as declare i

41、Age int; select iAge=age from deleted if iAge45 begin raiserror (学生年龄应该大于等于8,并小于等于 45,16,1);rollback transaction end 当对表S做update操作时,会自动触发TR_S_Age_update触发 器,若入学日期与出生日期年份之差小于8则,取消该次修改 操作。 例例7-27 7-27 创建一个触发器,当向S表中更新一条记录时,自动 显示S表中的记录 CREATE TRIGGER Change_S_Sel ON S FOR INSERT,UPDATE,DELETE AS SELECT

42、* FROM S 返回返回 上机实习8 (2 2)触发器的引发(使用)触发器的引发(使用) 类似的对课程C表创建插入触发器TR_C_insert: use jxgl; if exists(select name from sysobjects where name=TR_C_insert and type=TR) drop trigger TR_C_insert go create trigger TR_C_insert on C for insert as declare iCT int; select iCT = CT from inserted if iCT10 begin raiserror (课程学分应大于等于1,小于等于10。 ,16,1);rollback transaction end 当对C表插入一条记录,如:insert into C(Cno,CN,CT) values(C8,运筹学,0.5),则引发触发器TR_C_insert,取消 该记录的插入。在查询分析器中,对表S执行修改命令操作时, 引发了修改触发器,实验中特别注意执行情况及触发消息等。 返回返回 上机实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论