sql存储过程和触发器_第1页
sql存储过程和触发器_第2页
sql存储过程和触发器_第3页
sql存储过程和触发器_第4页
sql存储过程和触发器_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章 存储过程和触发器,存储过程 触发器,7.1 存储过程,存储过程是一种数据库对象,将执行计划存储在数据库的服务器中。它的运行速度比独立运行同样的程序要快。 存储过程类型 创建存储过程 执行存储过程 修改存储过程 删除存储过程,7.1.1 存储过程类型,系统存储过程 存储在master数据库中,以sp_为前缀。可以在其他 数据库中对其进行调用。 用户自定义存储过程 由用户创建并能完成某一特定功能的存储过程。或 称本地存储过程。包括临时存储过程、远程存储过 程、扩展存储过程。 临时存储过程又包括局部的和全局的临时存储过 程,前者在过程名的前面带#,后者在过程名的前面 带#。全局临时存储过程对

2、所有用户都可见。 扩展存储过程的前缀是xp_ 。,7.1.2 创建存储过程,用企业管理器创建 用T-SQL命令创建 存储过程的三个组成部分: (1)所有的输入参数以及传给调用者的输出参数; (2)被执行的针对数据库的操作语句,包括调用其他 存储过程的语句; (3)返回给调用者的状态值,以指明调用是成功还是 失败。,7.1.2 创建存储过程,T-SQL创建存储过程的基本语法格式: CREATE PROCEDURE 存储过程名称 参数定义 AS SQL语句 例7.1:创建存储过程,实现查询所有学生信息的功能。 Create proc proc_7_1 As Select * From xsqk 思

3、考:创建存储过程,实现查询所有学生的学号、姓名、所选课程号、课程名、成绩及学分信息的功能。,7.1.2 创建存储过程,例7.2:创建存储过程proc_7_2,要求实现根据学生学号,产生不同结果,如果该学生信息不存在,则显示“无此学号的学生!”,否则返回该学生的基本信息。 Create proc proc_7_2 sno char(8) As If exists(Select * From xsqk where 学号= sno) select * From xsqk where 学号= sno Else print 无此学号的学生! 思考:创建存储过程testproc2,实现根据学生的学号,查询

4、此学生的学号、姓名、所选课程号、课程名、成绩及学分等信息。,7.1.2 创建存储过程,说明: (1)在一个批处理中,Create procedure语句不能与其 他SQL语句合并在一起。 (2)数据库所有者具有默认的创建存储过程的权限。 (3)存储过程作为数据库对象其命名必须符合命名规 则。 (4)只能在当前数据库中创建属于当前数据库的存储过 程。 (5)一个存储过程的最大尺寸为128M。,7.1.3 执行存储过程,语句格式: EXECUTE 存储过程名称 参数值 例7.3:执行例7.1的存储过程。 exec proc_7_1 例7.4:执行例7.2的存储过程,查询学号为“02020101”学

5、生的基本信息。 exec proc_7_2 02020101 或 exec proc_7_2 sno= 02020101,7.1.3 举例,例7.5:在学生成绩库中创建存储过程proc_7_t1,要求实现如下功能:产生计算机0203班学生的选课情况列表,其中包括学号、姓名、性别、课程号、课程名称、学分等。并调用此存储过程,显示执行结果。,create proc proc_7_t1 as Select xsqk.学号, 姓名, 性别, xskc.课程号, 课程名, xskc.学分 From xsqk, xscj, xskc Where xsqk.学号 = xscj.学号 and xscj.课程号

6、 = xskc.课程号 and 班级 = 计算机0203,例7.6:在学生成绩库中创建存储过程proc_7_t2,要求实现如下功能:根据学生学号,如果此学生存在,则产生该生的课程成绩列表,其中包括学号、课程号、课程名称、成绩、学分等;如果此学生不存在,则显示“无此学生!”。并调用此存储过程,显示“02020101”学生的课程成绩情况。,create proc proc_7_t2 sno char(8) as if exists(select * from xsqk where 学号=sno) Select 学号,xscj.课程号,课程名,成绩,xskc.学分 From xscj, xskc W

7、here xscj.课程号=xskc.课程号 and 学号= sno else print 无此学生!,7.1.4 修改存储过程,语法格式: ALTER PROCEDURE 存储过程名称 参数定义 AS SQL语句,例7.7:修改在例7.5中已创建的存储过程proc_7_t1,要求在显示列中加入成绩列。 alter proc proc_7_t1 as Select xsqk.学号,姓名,性别,xskc.课程号, 课程名, xskc.学分, 成绩 From xsqk, xscj, xskc Where xsqk.学号 = xscj.学号 and xscj.课程号 = xskc.课程号 and 班

8、级 = 计算机0203,7.1.5 删除存储过程,语法格式: DROP PROCEDURE 存储过程名称 例7.8:删除存储过程proc_7_1。 drop proc proc_7_1 一般地,在用T-SQL命令创建存储过程时,总是先确定要创建的存储过程是否已经存在,如果存在,那么就删除重建。我们可以用如下语句实现: If exists( select name from sysobjects where name = proc_7_1 and type = P) drop proc proc_7_1,7.2 触发器,触发器是一种特殊类型的存储过程,当表中数据被修改时,SQL Server自动

9、执行触发器中定义的T-SQL语句。使用触发器可以实施更为复杂的数据完整性约束。 触发器概述 创建触发器 修改触发器 删除触发器,7.2.1 触发器概述,触发器的概念及作用 触发器是一种特殊类型的存储过程,主要 通过事件进行触发执行的,是维护数据库完整 性最强大的工具,能在任何情况下维护数据库 的完整性。,7.2.1 触发器概述,触发器可以完成的任务 数据库中相关表的级联操作 不接受或回滚违反参照完整性的数据修改事务 强制执行远复杂于CHECK约束的限制约束 通过INSERT,UPDATE和DELETE语句比较数据修改前后的状态,并根据修改,执行一定的操作.,7.2.1 触发器概述,触发器的种类

10、 AFTER触发器 只有对表执行某一操作之后,才能被触发。可以为 表的同一操作定义多个触发器,其触发次序可使用 sp_settriggerorder来完成。 INSTEAD OF触发器 并不执行其所定义的操作而仅是执行触发器本身, 对同一操作只能定义一个instead of 触发器。,7.2.1 触发器概述,利用 CREATE TRIGGER 命令创建触发器,CREATE TRIGGER trigger_name ON ( table | view ) WITH ENCRYPTION FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE WITH

11、APPEND NOT FOR REPLICATION AS Sql_statementn | FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE WITH APPEND NOT FOR REPLICATION AS IF UPDATE (column) AND | OR UPDATE (column) .n | IF (COLUMNS_UPDATED () bitwise_operator updated_bitmask) comparison_operator column_bitmask .n sql_statement .n ,7.2.2

12、创建触发器,用企业管理器创建 用T-SQL命令创建 语法格式: CREATE TRIGGER 触发器名称 ON 表或视图 FOR | AFTER | INSTEAD OF DELETE,INSERT,UPDATE AS SQL语句,7.2.2 创建触发器,CTEATE TRIGGER 语句必须是批处理的第一个语句; 表的所有者具有创建触发器的默认权限,表的所有者 不能把该权限传给其他用户; 触发器是数据库对象,其命名必须符合命名规则。 尽管在触发器的SQL语句中可以参照其他数据库中的对 象,但是,触发器只能创建在当前数据库中。 一个触发器只能对应一个表,这是由触发器的机制决 定的。,7.2.3 修改触发器,1. 修改触发器的名字 sp_rename 触发器原名

温馨提示

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

评论

0/150

提交评论