计算机原理 第9章 存储过程与触发器.ppt

上传人:数据九部 文档编号:10854608 上传时间:2021-06-08 格式:PPT 页数:113 大小:1.12MB
返回 下载 相关 举报
计算机原理 第9章 存储过程与触发器.ppt_第1页
第1页 / 共113页
计算机原理 第9章 存储过程与触发器.ppt_第2页
第2页 / 共113页
计算机原理 第9章 存储过程与触发器.ppt_第3页
第3页 / 共113页
计算机原理 第9章 存储过程与触发器.ppt_第4页
第4页 / 共113页
计算机原理 第9章 存储过程与触发器.ppt_第5页
第5页 / 共113页
点击查看更多>>
资源描述

《计算机原理 第9章 存储过程与触发器.ppt》由会员分享,可在线阅读,更多相关《计算机原理 第9章 存储过程与触发器.ppt(113页珍藏版)》请在三一文库上搜索。

1、学习目标: 通过本章学习,你能够学会: 1. 了解存储过程与触发器的特性 2. 了解存储过程与触发器的优点 3. 应熟练掌握使用企业管理器创建、修改、删除和查看存储过程与与触发器的操作。 4. 应熟练掌握使用T-SQL语句创建、修改、删除和查看存储过程,及如何执行存储过程与与触发器的操作。,第9章 存储过程与触发器,存储过程与触发器是SQL Server中的两类数据库对象。它们都是由T-SQL语句编写而成的过程,所不同的是存储过程是由用户根据需要调用执行的,而触发器则是由某个动作(如删除或修改一条记录)引发执行的。另外,存储过程可以不依附于表而单独存在,而触发器则必须依附于一个特定的表。它们与

2、函数也不同,函数可以直接通过函数名返回数值,其返回值可以直接在表达式中使用,而存储过程与触发器则不能直接通过其名称带回返回值,也不能直接在表达式中使用。,第9章 存储过程与触发器,91 存储过程概念 实例9.1 了解存储过程的执行过程,如图9.1所示。 归纳分析: 在SQL Server中定义的过程被称为存储过程。存储过程是一组预先编译好的T-SQL代码,作为一个整体用于执行特定的操作。存储过程属于数据库对象,它们存放在数据库中,需要时用户可以调用。,第9章 存储过程与触发器,存储过程具有如下优点: 1. 存储过程将一系列复杂的T-SQL代码封装在一起作为数据库对象存放在数据库 中,用户使用时

3、不必接触T-SQL而仅需直接调用即可得到所需结果,简化了用户的操作。 2. 存储过程已经被编译,执行时省去了编译与优化的时间。另外,第一次从磁盘调用存储过程后,它将驻留在内存中,下一次使用时可以直接从内存中调用,因此对于需要多次调用的存储过程而言,速度明显加快。 3.在分布式查询中,调用存储过程的语句将比直接使用T-SQL的语句少得多,这将大大减少网络流量。 4.通过适当的权限设置,可以使系统的安全性得到更有效的保障。,第9章 存储过程与触发器,92 存储过程分类 实例9.2 查看系统存储过程。 操作步骤:,第9章 存储过程与触发器,归纳分析: SQL Server的存储过程分为三大类: 1系

4、统存储过程 系统存储过程是SQL Server内置的存储过程,可以直接用于执行一些操作,用于进行系统管理、登录管理、权限设置、数据库对象管理、查看数据库信息、数据库复制等操作。系统存储过程存放在master数据库中,以sp_作为前缀。在任何数据库中无需用master限定就直接执行。,第9章 存储过程与触发器,2临时存储过程 临时存储过程与临时表类似。是对用户定义的存储过程。以#、或#开头的存储过程。无论用户在哪个数据库中创建,它们都存放在临时数据库tempdb中。以#开头的存储过程是局部临时存储过程,它仅能由其创建者本人在创建完后立即调用,一旦该创建者断开与数据库的连接,局部临时存储过程立即被

5、删除。以#开头的存储过程是全局临时存储过程,它可以由创建者本人和其他用户在创建完后共同调用,一旦创建者断开与数据库的连接,则不再允许新的用户使用,而且等其他正在使用该存储过程的用户使用完毕后,全局临时存储过程也被删除。,第9章 存储过程与触发器,3. 扩展存储过程 是利用高级语言(如C语言)编写的存储过程,是SQL Server可以动态装载并执行的动态链接库(DLL)。扩展存储过程只能添加到master数据库中。本章不介绍扩展存储过程有关内容,读者可以参考其他书籍有关内容。,第9章 存储过程与触发器,93存储过程创建 931使用企业管理器创建存储过程 实例9.3 在企业管理器中建立名为pro_

6、new的存储过程,并执行。 操作步骤:,第9章 存储过程与触发器,归纳分析: 如果是查看或修改已有存储过程的定义,则右击要查看或修改的存储过程,在弹出的快捷菜单中,选择“属性”命令,则调出“存储过程属性”窗口,在这里可以查看或修改存储过程的定义。,第9章 存储过程与触发器,932 使用T-SQL语句创建存储过程 实例9.4 在“学生”数据库中建立一个存储过程pro_new1,用于查询所有学生的学号和数学期中成绩、计算机期中成绩,要求数学期中成绩和计算机期中 成绩分别列出。 已知数学期中成 绩的课程号是 1002、计算机期中 成绩的课程号是2005。 操作步骤:,第9章 存储过程与触发器,归纳分

7、析: 如果是查看或修改已有存储过程的定义,则右击要查看或修改的存储过程,在弹出的快捷菜单中,选择“属性”命令,则调出“存储过程属性”窗口,在这里可以查看或修改存储过程的定义。,第9章 存储过程与触发器,932 使用T-SQL语句创建存储过程 实例9.4 在“学生”数据库中建立一个存储过程pro_new1,用于查询所有学生的学号和数学期中成绩、计算机期中成绩,要求数学期中成绩和计算机期中成绩分别列出。已知数学期中成绩的课程号是1002、计算机期中成绩的课程号是2005。 操作步骤:,第9章 存储过程与触发器,归纳分析: 在SQL Server中,使用CREATE PROCEDURE语句创建一个永

8、久或临时存储过程。 命令格式: CREATE PROCEDURE 存储过程名 WITH ENCRYPTION WITH RECOMPILE AS SQL 语句 命令说明: (1)WITH ENCRYPTION:对存储过程进行加密。 (2)WITH RECOMPILE:对存储过程重新编译。,第9章 存储过程与触发器,94 执行存储过程 实例9.5 分别执行实例9.3、实例9.4建立存储过程。 操作步骤:,第9章 存储过程与触发器,归纳分析: 注意:执行存储过程时,区分大小写。 存储过程一旦编写好后,就可以调用执行。执行存储过程的语法如下。 命令格式: EXECUTE 存储过程名 字符串变量|NS

9、QL语句字符串+n,第9章 存储过程与触发器,95 修改存储过程 951 更改存储过程名称 实例9.6 将实例9.3所创建的名为pro_new存储过程,修改成名为pro_存储过程。 操作步骤: (1) 启动“查询分析器”,输入如下SQL语句: sp_rename pro_new , pro_存储过程 (2)按“F5”键或单击工具栏“执行查询”图标。,第9章 存储过程与触发器,归纳分析: 只有数据库所有者和存储过程的所有者才有权修改存储过程名称。不宜轻易修改存储过程名称,因为系统中许多应用程序可能都要调用存储过程,如果修改了存储过程的名称,则这些应用程序都要随之改动。 命令格式: sp_rena

10、me 原存储过程名,新存储过程名 修改存储过程名称的方法与修改表名称的方法类同,读者可以参照执行。 使用企业管理器修改存储过程名称的方法也类似于修改表名称的方法,即展开指定的数据库节点,单击存储过程,在右边的窗口中选中一个需要修改名称的存储过程右击之,在弹出的快捷菜单中选择“重命名”。,第9章 存储过程与触发器,952 修改存储过程的参数与定义 1. 使用企业管理器修改存储过程 实例9.7 使用企业管理器修改存储过程实例9.4,增加显示课程号的列。 操作步骤:,第9章 存储过程与触发器,2. 使用T-SQL语句修改存储过程 实例9.8 在实例9.4创建的存储过程,修改查询记录按名次排列。 操作

11、步骤:,第9章 存储过程与触发器,归纳分析: 修改已经创建的存储过程,可以不更改其用户的使用权限,也不更改其名称,因此不会破坏其他相关程序的引用关系。 命令格式: ALTER PROCEDURE 存储过程名 WITH ENCRYPTION WITH RECOMPILE AS SQL 语句 命令说明: 其中各项语法含义与创建存储过程类似。,第9章 存储过程与触发器,96 删除存储过程 961使用企业管理器删除存储过程 实例9.9 使用企业管理器删除存储过程。 操作步骤:,第9章 存储过程与触发器,存储过程与触发器是SQL Server中的两类数据库对象。它们都是由T-SQL语句编写而成的过程,所

12、不同的是存储过程是由用户根据需要调用执行的,而触发器则是由某个动作(如删除或修改一条记录)引发执行的。另外,存储过程可以不依附于表而单独存在,而触发器则必须依附于一个特定的表。它们与函数也不同,函数可以直接通过函数名返回数值,其返回值可以直接在表达式中使用,而存储过程与触发器则不能直接通过其名称带回返回值,也不能直接在表达式中使用。,第9章 存储过程与触发器,归纳分析: SQL Server的存储过程分为三大类: 1系统存储过程 系统存储过程是SQL Server内置的存储过程,可以直接用于执行一些操作,用于进行系统管理、登录管理、权限设置、数据库对象管理、查看数据库信息、数据库复制等操作。系

13、统存储过程存放在master数据库中,以sp_作为前缀。在任何数据库中无需用master限定就直接执行。,第9章 存储过程与触发器,归纳分析: 如果是查看或修改已有存储过程的定义,则右击要查看或修改的存储过程,在弹出的快捷菜单中,选择“属性”命令,则调出“存储过程属性”窗口,在这里可以查看或修改存储过程的定义。,第9章 存储过程与触发器,归纳分析: 在SQL Server中,使用CREATE PROCEDURE语句创建一个永久或临时存储过程。 命令格式: CREATE PROCEDURE 存储过程名 WITH ENCRYPTION WITH RECOMPILE AS SQL 语句 命令说明:

14、(1)WITH ENCRYPTION:对存储过程进行加密。 (2)WITH RECOMPILE:对存储过程重新编译。,第9章 存储过程与触发器,归纳分析: 只有数据库所有者和存储过程的所有者才有权修改存储过程名称。不宜轻易修改存储过程名称,因为系统中许多应用程序可能都要调用存储过程,如果修改了存储过程的名称,则这些应用程序都要随之改动。 命令格式: sp_rename 原存储过程名,新存储过程名 修改存储过程名称的方法与修改表名称的方法类同,读者可以参照执行。 使用企业管理器修改存储过程名称的方法也类似于修改表名称的方法,即展开指定的数据库节点,单击存储过程,在右边的窗口中选中一个需要修改名称

15、的存储过程右击之,在弹出的快捷菜单中选择“重命名”。,第9章 存储过程与触发器,96 删除存储过程 961使用企业管理器删除存储过程 实例9.9 使用企业管理器删除存储过程。 操作步骤:,第9章 存储过程与触发器,962 使用T-SQL语言删除存储过程 实例9.10 删除Pro_new存储过程。 操作步骤: (1) 启动“查询分析器”,输入如下SQL语句: DROP PROCEDURE Pro_new (2)按“F5”键或单击工具栏“执行查询”图标。 归纳分析: 不再需要存储过程时,可以利用企业管理器或T-SQL语言删除。 命令格式: DROP PROCEDURE 存储过程名称或存储过程组名称

16、 注意:删除存储过程组时不必写出下标,即可将组中所有成员全部删除。,第9章 存储过程与触发器,97 查看存储过程 971使用企业管理器查看存储过程的信息 实例9.11 使用企业管理器查看存储过程的信息。 操作步骤: 在图9.4所示属性对话框中可以查询存储过程的名称、所有者、建立时间和文本信息。 在图9.3所示窗口的右部选中一个存储过程并右击,在弹出的级联菜单中依次选择“所有任务”、“显示相关性”,系统会弹出“显示相关性”对话框,该对话框显示一个存储过程所引用的表及其列信息。,第9章 存储过程与触发器,972 使用T-SQL语言查看存储过程的信息 实例9.12 利用系统存储过程查询 pro_存储

17、过程的信息。 操作步骤:,第9章 存储过程与触发器,归纳分析: (1)查看定义存储过程的文本命令格式: sp_helptext obiname= 存储过程名 (2)查看存储过程的名称、所有者、建立时间命令格式: sp_help obiname= 存储过程名 (3)查看存储过程所引用的表(或查看一个表被哪些存储过程所引用) 命令格式: sp_depends obiname= 表名 (4)查看一个存储过程引用了哪些表及其列: sp_depends obiname= 存储过程名,第9章 存储过程与触发器,归纳分析: (1)查看定义存储过程的文本命令格式: sp_helptext obiname= 存

18、储过程名 (2)查看存储过程的名称、所有者、建立时间命令格式: sp_help obiname= 存储过程名 (3)查看存储过程所引用的表(或查看一个表被哪些存储过程所引用) 命令格式: sp_depends obiname= 表名 (4)查看一个存储过程引用了哪些表及其列: sp_depends obiname= 存储过程名,第9章 存储过程与触发器,命令格式: CREATE PROCEDURE 存储过程名 参数名 数据类型=默认值 WITHEN ENCRYPTION WITHRE RECOMPILE AS SQL语句 命令说明: “参数名”和定义局部变量一样,必须以符号为前缀,要指定数据类

19、型,多个参数定义要用逗号“,”隔开。在执行存储过程时该参数将由指定的参数值来代替,如果执行时未提供该参数的参数值,则如果这里定义了默认值则使用该值作为执行时的参数值,默认值可以是常量或空(NULL)。,第9章 存储过程与触发器,99创建触发器 SQL Server 2000提供了两种主要机制用于维护数据的完整性:一种是第8章介绍的约束,另一种就是本章将要介绍的触发器。触发器虽然是一种特殊的存储过程,但是它与表却是紧密联系的,离开了表它将不复存在(这点与约束十分类似)。触发器又不像存储过程那样需要调用才能执行,而是在对表中数据进行增、删、改(INSERT、UPDATE、 DELETE)操作时被触

20、发而执行。触发器可以包含复杂的T-SQL语句。在触发器内设置回滚,可以将触发它的语句所在的事务全部回滚,这样检测到错误时可以回滚事务以撤销错误。,第9章 存储过程与触发器,992 使用T-SQL语句创建触发器 实例9.16 建立一个触发器,防止用户在要删除表学生信息中的一条数据时,由于没有使用限制条件(误用SELECT FROM 学生信息语句)而导致删除全部数据的情况发生。 操作步骤:,第9章 存储过程与触发器,(4) INSERT,UPDATE , DELETE:指定在表或视图上执行哪些数据修改语句时将激活触发器。必须至少指定一个选项,如果指定的选项多于一个,需用逗号分隔。 (5) IF U

21、PDATE(列名)(AND|OR) UPDATE(列名)n:判定某一列或几列,是否被修改。如果希望仅当某一列(或几列)的数据发生变化才导致触发器动作,而其他列的数据变化不会引发触发器执行,则可以采用本选项。此时可以称之为列级触发器。,第9章 存储过程与触发器,归纳分析: SQL Server 2000中可以建立两类触发器,一类是在触发后将执行一组新的T-SQL语句用以代替引起触发器执行的语句(原有语句没有执行,仅执行新语句),称之为INSTEAD OF触发器:另一类是在引起触发器执行的语句执行完毕后,再执行触发器中的语句,称之为AFTER类触发器。 (1)INSTEAD OF触发器既可以在表上

22、定义,也可以在视图上定义。该类触发器依据其触发动作(UPDATE、DELETE和INSERT)的不同分为INSTEAD OF INSERT、INSTEAD OF UPDATE和INSTEAD OF DELETE三种,被引发执行时将分别代替表或视图的INSERT、UPDATE、DELETE操作,亦即表中的增删改操作没有进行。每个触发动作仅可以定义一个INSTEAD OF触发器。,第9章 存储过程与触发器,9112 修改触发器的定义 实例9.21 在企业管理器中修改实例9.17将删除表改为添加记录。 操作步骤: (3)单击检查语法按钮, 进行语法检查,成功后, 可插入数据检验触发器 的效果。,第9

23、章 存储过程与触发器,4. 应熟练掌握使用企业管理器创建、修改、删除和查看存储过程的操作。 5. 应熟练掌握使用T-SQL语句创建、修改、删除和查看存储过程,及如何执行存储过程的操作。 6. 应掌握使用T-SQL语句带参数和变量创建和修改存储过程,及如何执行存储过程。 7. 了解触发器在对表中数据进行增、删、改(INSERT、UPDATE、 DELETE)操作时被触发而执行。触发器可以包含复杂的T-SQL语句。在触发器内设置回滚,可以将触发它的语句所在的事务全部回滚,这样检测到错误时可以回滚事务以撤销错误。 8. 触发器的优点: (1)触发器可以实现外键约束的功能,实现对表的级连修改。,第9章

24、 存储过程与触发器,9.15.2 实训 1 实训目的 (1) 熟练掌握用T-SQL语句存储过程与触发器所需的记录。 (2) 熟练掌握用T-SQL语句编写的操作过程。 (3) 熟练掌握存储过程与触发器的表示方法。 (4) 熟练掌握使用企业管理器创建、修改、删除和查看存储过程与与触发器的操作。 (5) 熟练掌握使用T-SQL语句创建、修改、删除和查看存储过程,及如何执行存储过程与与触发器的操作。 2实训环境 SQL Server 2000的运行、管理环境。,第9章 存储过程与触发器,98 存储过程编程 981 参数和变量 实例9.13 创建的存储过程, 修改成当输入学生学号时可 以查询某个学生的成

25、绩: 不输入学号时,则查询 全部学生的成绩。 操作步骤:,第9章 存储过程与触发器,(3)本例定义了一个输入参数stuID用于传送学号,其默认值为空。执行存储过程时,如果指定了该输入参数的值,则按照该参数所给的学号查询指定学生的成绩,如果参数stuID的值为空,则查询所有学生成绩。输入如图9.8所示上部分程序,查看运行结果,如图9.8所示下部分。,第9章 存储过程与触发器,归纳分析: 1.建立带输入参数的存储过程 向存储过程指定输入、输出参数的主要目的是通过参数向存储过程输入和输出信息来扩展存储过程的功能。通过使用参数,可以多次使用同一存储过程并按用户要求查找所需要的结果。如实训9.13所示,

26、没有参数就缺少灵活性。 一个存储过程可以带一个或多个输入参数,输入参数是指由调用程序向存储过程传递的参数,它们在创建存储过程语句中被定义,在执行存储过程中给出相应的参数值。,第9章 存储过程与触发器,命令格式: CREATE PROCEDURE 存储过程名 参数名 数据类型=默认值 WITHEN ENCRYPTION WITHRE RECOMPILE AS SQL语句 命令说明: “参数名”和定义局部变量一样,必须以符号为前缀,要指定数据类型,多个参数定义要用逗号“,”隔开。在执行存储过程时该参数将由指定的参数值来代替,如果执行时未提供该参数的参数值,则如果这里定义了默认值则使用该值作为执行时

27、的参数值,默认值可以是常量或空(NULL)。,第9章 存储过程与触发器,2执行带参数的存储过程 在执行存储过程的语句中,有两种方式来传递参数值,分别是使用参数名传递参数值和按参数位置传递参数值。 使用参数名传递参数值,是通过语句“参数名:参数值”给参数传递值。当存储过程含有多个输入参数时,参数值可以按任意顺序制定,对于允许空值和具有默认值的输入参数可以不给出参数的传递值。 执行使用参数名传递参数值的存储过程的命令格式: EXECUTE 存储过程名 参数名=参数值 按参数位置传递参数值,不显式地给出“参数名”,而是按照参数定义的顺序给出参数值。按位置传递参数时,也可以忽略允许空值和具有默认值的参

28、数,但不能因此破坏输入参数的指定顺序。必要时,使用关键字“DEFAULT”作为默认值的占位。,第9章 存储过程与触发器,982 RETURN语句和错误处理 实例9.14 在学生成绩表基础上建立一个存储过程pro_new3,要求:未输入学生学号时打印一个字符串“请输入学号”,并返回数字1;输入的学号查询不到时打印一个字符串“没有您输入的学号,请重新输入”,并返回数字2:输入学生学号正确时,查询该学号对应的期中成绩(课程号为1002)考试成绩。 操作步骤:,第9章 存储过程与触发器,归纳分析: 用户可以通过RETUEN语句返回状态值,RETURN语句只能返回整数,在存储过程中RETURN不能返回空

29、值,默认返回值是0。也可以利用它返回整数输出参数值。,第9章 存储过程与触发器,99创建触发器 SQL Server 2000提供了两种主要机制用于维护数据的完整性:一种是第8章介绍的约束,另一种就是本章将要介绍的触发器。触发器虽然是一种特殊的存储过程,但是它与表却是紧密联系的,离开了表它将不复存在(这点与约束十分类似)。触发器又不像存储过程那样需要调用才能执行,而是在对表中数据进行增、删、改(INSERT、UPDATE、 DELETE)操作时被触发而执行。触发器可以包含复杂的T-SQL语句。在触发器内设置回滚,可以将触发它的语句所在的事务全部回滚,这样检测到错误时可以回滚事务以撤销错误。,第

30、9章 存储过程与触发器,991使用企业管理器创建触发器 实例9.15 在表学生成绩中建立一个触发器,当向表中插入一条记录时,检查该学生的学号是否存在于表学生信息中,如果存在,则插入;否则,打印“学号不存在”,并回滚事务,使插入数据无效。 操作步骤:,第9章 存储过程与触发器,归纳分析: 创建触发器之前要注意如下几点: (1)创建触发器所使用的语句CREATET RIGGER必须是批处理中的第一个语句。 (2)只有表的所有者、sysadmin固定服务器角色成员以及db_owner和曲_ddladmin固定数据库角色成员有权在本表上创建触发器,且不能将该权限授予其他用户。 (3)触发器为数据库对象

31、,其命名规则必须与标识符命名规则一致。 (4)只能在当前数据库中创建触发器,但是触发器可以引用其他数据库的对象。 (5)不能在临时表或系统表上创建触发器。触发器可以引用临时表,但不能引用系统表。 (6)尽管TRUNCATE TABLE语句用于删除表中所有记录,但由于它不写入日志,故不能引发DELETE触发器。,第9章 存储过程与触发器,(7) WRITETEXT语句不会引发INSERT或UPDATE触发器。 (8) 如果一个触发器中含有回滚事务语句RULLBACK TRANSACTION,且引发触发器的语句位于一个事务中,则该触发器触发时将回滚事务。 (9) 在触发器内不能使用的命令有:CRE

32、ATE、ALTER、GRANT、REVOKE、TRUNCATE TABLE、DROP等。 (10) 如果一个触发器中含有回滚事务语句RULLBACK TRANSACTION,且引发该触发器的语句位于一个批中,则一旦触发器执行,该批中引发触发器执行的语句之后的所有语句将不会执行。,第9章 存储过程与触发器,992 使用T-SQL语句创建触发器 实例9.16 建立一个触发器,防止用户在要删除表学生信息中的一条数据时,由于没有使用限制条件(误用SELECT FROM 学生信息语句)而导致删除全部数据的情况发生。 操作步骤:,第9章 存储过程与触发器,(3)本例建立了一个AFIER触发器(仅给出FOR

33、表示默认为AFTER型触发器)用于DELETE操作,首先声明一个局部变量用以存放Deleted表中数据行数。当对学生信息表执行删除操作时,检查删除的行数(Deleted表中数据行数),如果行数1,则认为操作错误,打印提示信息并回滚事务,使删除无效。但是如果使用TRUNCATE TABLE学生信息清除表中所有数据,则触发器不会触发,可以成功删除全部数据。,第9章 存储过程与触发器,归纳分析: 使用T-SQL语句创建触发器基本语法如下。 命令格式: CREATE TRIGGER 触发器名 ON表|视图 WITH ENCRYPTION FOR |AFTER |INSTEAD OFINSERT,UPD

34、ATE , DELETE NOT FOR REPLICATION AS IF UPDATE(列名)(AND|OR) UPDATE(列名)n SQL语句,第9章 存储过程与触发器,命令说明: (1)触发器的名称,必须符合标识符规则,并且必须在数据库中惟一。 (2)WITH ENCRYPTION用于加密CREATE TRIGGER语句文本的条目。 (3)FOR:用以指定触发器的类型,该关键字可以省略。后面为AFTER时表示触发器为AFTER类型,后面为INSTEAD OF时表示触发器为INSTEAD OF类型。如果仅指定FOR关键字,则默认为AFTER触发器。,第9章 存储过程与触发器,(4) I

35、NSERT,UPDATE , DELETE:指定在表或视图上执行哪些数据修改语句时将激活触发器。必须至少指定一个选项,如果指定的选项多于一个,需用逗号分隔。 (5) IF UPDATE(列名)(AND|OR) UPDATE(列名)n:判定某一列或几列,是否被修改。如果希望仅当某一列(或几列)的数据发生变化才导致触发器动作,而其他列的数据变化不会引发触发器执行,则可以采用本选项。此时可以称之为列级触发器。,第9章 存储过程与触发器,(4) INSERT,UPDATE , DELETE:指定在表或视图上执行哪些数据修改语句时将激活触发器。必须至少指定一个选项,如果指定的选项多于一个,需用逗号分隔。

36、 (5) IF UPDATE(列名)(AND|OR) UPDATE(列名)n:判定某一列或几列,是否被修改。如果希望仅当某一列(或几列)的数据发生变化才导致触发器动作,而其他列的数据变化不会引发触发器执行,则可以采用本选项。此时可以称之为列级触发器。,第9章 存储过程与触发器,UPDATE操作相当于先执行DELETE操作,然后再执行INSERT操作,因此要用到Deleted与Inserted两个表。,第9章 存储过程与触发器,归纳分析: SQL Server 2000中可以建立两类触发器,一类是在触发后将执行一组新的T-SQL语句用以代替引起触发器执行的语句(原有语句没有执行,仅执行新语句),

37、称之为INSTEAD OF触发器:另一类是在引起触发器执行的语句执行完毕后,再执行触发器中的语句,称之为AFTER类触发器。 (1)INSTEAD OF触发器既可以在表上定义,也可以在视图上定义。该类触发器依据其触发动作(UPDATE、DELETE和INSERT)的不同分为INSTEAD OF INSERT、INSTEAD OF UPDATE和INSTEAD OF DELETE三种,被引发执行时将分别代替表或视图的INSERT、UPDATE、DELETE操作,亦即表中的增删改操作没有进行。每个触发动作仅可以定义一个INSTEAD OF触发器。,第9章 存储过程与触发器,9112 修改触发器的定

38、义 实例9.21 在企业管理器中修改实例9.17将删除表改为添加记录。 操作步骤: (3)单击检查语法按钮, 进行语法检查,成功后, 可插入数据检验触发器 的效果。,第9章 存储过程与触发器,912 删除触发器 实例9.23 删除不用的触发器名。 操作步骤:,第9章 存储过程与触发器,归纳分析: 触发器创建以后,可以使用系统存储过程浏览触发器的有关信息。 (1)显示触发器对象的类型。创建时间、所有者信息。 sp_help 触发器名 (2)显示触发器的定义文本。如果触发器使用了加密(WITH ENCRYPTION选项),则无法看到触发器的代码文本。 sp_helptext 触发器名,第9章 存储

39、过程与触发器,4. 应熟练掌握使用企业管理器创建、修改、删除和查看存储过程的操作。 5. 应熟练掌握使用T-SQL语句创建、修改、删除和查看存储过程,及如何执行存储过程的操作。 6. 应掌握使用T-SQL语句带参数和变量创建和修改存储过程,及如何执行存储过程。 7. 了解触发器在对表中数据进行增、删、改(INSERT、UPDATE、 DELETE)操作时被触发而执行。触发器可以包含复杂的T-SQL语句。在触发器内设置回滚,可以将触发它的语句所在的事务全部回滚,这样检测到错误时可以回滚事务以撤销错误。 8. 触发器的优点: (1)触发器可以实现外键约束的功能,实现对表的级连修改。,第9章 存储过

40、程与触发器,9.15.2 实训 1 实训目的 (1) 熟练掌握用T-SQL语句存储过程与触发器所需的记录。 (2) 熟练掌握用T-SQL语句编写的操作过程。 (3) 熟练掌握存储过程与触发器的表示方法。 (4) 熟练掌握使用企业管理器创建、修改、删除和查看存储过程与与触发器的操作。 (5) 熟练掌握使用T-SQL语句创建、修改、删除和查看存储过程,及如何执行存储过程与与触发器的操作。 2实训环境 SQL Server 2000的运行、管理环境。,第9章 存储过程与触发器,910 触发器介绍 触发器具有如下优点: (1)触发器可以实现外键约束的功能,实现对表的级连修改。 (2)触发器可以实现核查

41、约束的功能,而且其功能更为强大。它可以使用另一个表的内容来约束触发器所在表。 (3)如果对表中数据进行了增、删、改的操作,使用触发器可以根据修改前后的差异,采取相应的对策。 (4)允许在一个表中针对不同的增删改操作设置多个触发器,以完成各类不同任务。,第9章 存储过程与触发器,存储过程与触发器是SQL Server中的两类数据库对象。它们都是由T-SQL语句编写而成的过程,所不同的是存储过程是由用户根据需要调用执行的,而触发器则是由某个动作(如删除或修改一条记录)引发执行的。另外,存储过程可以不依附于表而单独存在,而触发器则必须依附于一个特定的表。它们与函数也不同,函数可以直接通过函数名返回数

42、值,其返回值可以直接在表达式中使用,而存储过程与触发器则不能直接通过其名称带回返回值,也不能直接在表达式中使用。,第9章 存储过程与触发器,归纳分析: SQL Server的存储过程分为三大类: 1系统存储过程 系统存储过程是SQL Server内置的存储过程,可以直接用于执行一些操作,用于进行系统管理、登录管理、权限设置、数据库对象管理、查看数据库信息、数据库复制等操作。系统存储过程存放在master数据库中,以sp_作为前缀。在任何数据库中无需用master限定就直接执行。,第9章 存储过程与触发器,归纳分析: 如果是查看或修改已有存储过程的定义,则右击要查看或修改的存储过程,在弹出的快捷

43、菜单中,选择“属性”命令,则调出“存储过程属性”窗口,在这里可以查看或修改存储过程的定义。,第9章 存储过程与触发器,归纳分析: 在SQL Server中,使用CREATE PROCEDURE语句创建一个永久或临时存储过程。 命令格式: CREATE PROCEDURE 存储过程名 WITH ENCRYPTION WITH RECOMPILE AS SQL 语句 命令说明: (1)WITH ENCRYPTION:对存储过程进行加密。 (2)WITH RECOMPILE:对存储过程重新编译。,第9章 存储过程与触发器,归纳分析: 只有数据库所有者和存储过程的所有者才有权修改存储过程名称。不宜轻易

44、修改存储过程名称,因为系统中许多应用程序可能都要调用存储过程,如果修改了存储过程的名称,则这些应用程序都要随之改动。 命令格式: sp_rename 原存储过程名,新存储过程名 修改存储过程名称的方法与修改表名称的方法类同,读者可以参照执行。 使用企业管理器修改存储过程名称的方法也类似于修改表名称的方法,即展开指定的数据库节点,单击存储过程,在右边的窗口中选中一个需要修改名称的存储过程右击之,在弹出的快捷菜单中选择“重命名”。,第9章 存储过程与触发器,96 删除存储过程 961使用企业管理器删除存储过程 实例9.9 使用企业管理器删除存储过程。 操作步骤:,第9章 存储过程与触发器,归纳分析

45、: 在SQL Server中,使用CREATE PROCEDURE语句创建一个永久或临时存储过程。 命令格式: CREATE PROCEDURE 存储过程名 WITH ENCRYPTION WITH RECOMPILE AS SQL 语句 命令说明: (1)WITH ENCRYPTION:对存储过程进行加密。 (2)WITH RECOMPILE:对存储过程重新编译。,第9章 存储过程与触发器,97 查看存储过程 971使用企业管理器查看存储过程的信息 实例9.11 使用企业管理器查看存储过程的信息。 操作步骤: 在图9.4所示属性对话框中可以查询存储过程的名称、所有者、建立时间和文本信息。 在

46、图9.3所示窗口的右部选中一个存储过程并右击,在弹出的级联菜单中依次选择“所有任务”、“显示相关性”,系统会弹出“显示相关性”对话框,该对话框显示一个存储过程所引用的表及其列信息。,第9章 存储过程与触发器,命令格式: CREATE PROCEDURE 存储过程名 参数名 数据类型=默认值 WITHEN ENCRYPTION WITHRE RECOMPILE AS SQL语句 命令说明: “参数名”和定义局部变量一样,必须以符号为前缀,要指定数据类型,多个参数定义要用逗号“,”隔开。在执行存储过程时该参数将由指定的参数值来代替,如果执行时未提供该参数的参数值,则如果这里定义了默认值则使用该值作

47、为执行时的参数值,默认值可以是常量或空(NULL)。,第9章 存储过程与触发器,归纳分析: SQL Server 2000中可以建立两类触发器,一类是在触发后将执行一组新的T-SQL语句用以代替引起触发器执行的语句(原有语句没有执行,仅执行新语句),称之为INSTEAD OF触发器:另一类是在引起触发器执行的语句执行完毕后,再执行触发器中的语句,称之为AFTER类触发器。 (1)INSTEAD OF触发器既可以在表上定义,也可以在视图上定义。该类触发器依据其触发动作(UPDATE、DELETE和INSERT)的不同分为INSTEAD OF INSERT、INSTEAD OF UPDATE和IN

48、STEAD OF DELETE三种,被引发执行时将分别代替表或视图的INSERT、UPDATE、DELETE操作,亦即表中的增删改操作没有进行。每个触发动作仅可以定义一个INSTEAD OF触发器。,第9章 存储过程与触发器,98 存储过程编程 981 参数和变量 实例9.13 创建的存储过程, 修改成当输入学生学号时可 以查询某个学生的成绩: 不输入学号时,则查询 全部学生的成绩。 操作步骤:,第9章 存储过程与触发器,2执行带参数的存储过程 在执行存储过程的语句中,有两种方式来传递参数值,分别是使用参数名传递参数值和按参数位置传递参数值。 使用参数名传递参数值,是通过语句“参数名:参数值”

49、给参数传递值。当存储过程含有多个输入参数时,参数值可以按任意顺序制定,对于允许空值和具有默认值的输入参数可以不给出参数的传递值。 执行使用参数名传递参数值的存储过程的命令格式: EXECUTE 存储过程名 参数名=参数值 按参数位置传递参数值,不显式地给出“参数名”,而是按照参数定义的顺序给出参数值。按位置传递参数时,也可以忽略允许空值和具有默认值的参数,但不能因此破坏输入参数的指定顺序。必要时,使用关键字“DEFAULT”作为默认值的占位。,第9章 存储过程与触发器,991使用企业管理器创建触发器 实例9.15 在表学生成绩中建立一个触发器,当向表中插入一条记录时,检查该学生的学号是否存在于表学生信息中,如果存在,则插入;否则,打印“学号不存在”,并回滚事务,使插入数据无效。 操作步骤:,第9章 存储过程与触发器,(3)本例建立了一个AFIER触发器(仅给出FOR表示默认为AFTER型触发器)用于DELETE操作,首先声明一个局部

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1