第11章存储过程和触发器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库原理与应用教程
第11章 存储过程和触发器
第11章 存储过程和触发器
在SQL Server 2005应用操作中,存储过程和触 发器都扮演着相当重要的角色。
存储过程可以使用户对数据库的管理工作变得 更容易。当开发一个应用程序时,为了易于修 改和扩充,经常会将负责不同功能的语句集中 起来而且按照用途分别独立放置,以便能够反 复调用,而这些独立放置且拥有不同功能的语 句,即是“过程”(Procedure)。
ห้องสมุดไป่ตู้
11.1.4 执行存储过程
【例11-7】执行存储过程student_avg。 EXECUTE student_avg 【例11-8】执行带参数的存储过程GetStudent,查询 1302001 号学生的基本信息。 EXECUTE GetStudent '1302001' 【例11-9】执行修改成绩的存储过程Update_score,将 1302001号学生选修的C001号课程的成绩改为100。 EXECUTE Update_score '1302001','C001',100 【例11-10】执行修改单价的存储过程Update_price,如果 “ds_018”号商品的库存超过20,则单价打九折。 EXECUTE Update_price 'ds-018',20
11.1.3 创建存储过程
2.利用T-SQL语句创建存储过程 CREATE { PROC | PROCEDURE } procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ [ OUT [ PUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } [ ,...n ] ] [FOR REPLICATION] AS sql_statement [ ...n ]
11.1.3 创建存储过程
【例11-2】在“teaching”库创建带参数的存储过程, 查询某个学生的基本信息。 USE teaching GO CREATE PROCEDURE GetStudent @number char(7) AS SELECT * FROM student WHERE sno= @number GO
11.1.1 存储过程概述
存储过程是一种独立存储在数据库内的对象,可以接 受输入参数、输出参数,返回单个或多个结果集以及 返回值,由应用程序通过调用执行。存储过程可以由 客户调用,也可以从另一个过程或触发器调用,参数 可以被传递和返回,出错代码也可以被检验。 存储过程最主要的特色是当写完一个存储过程后即被 翻译成可执行码存储在系统表内,当作是数据库的对 象之一,一般用户只要执行存储过程,并且提供存储 过程所需的参数就可以得到所要的结果而不必再去编 辑T-SQL命令。
11.1.3 创建存储过程
【例11-4】使用流程控制语句,在“inventory”数据库创建存 储过程,修改某商品的单价,如果库存总量大于某个值,就 打九折。 USE inventory GO CREATE PROCEDURE Update_price @gno char(3), @s float AS IF (SELECT sum(number) FROM invent WHERE gno= @gno )> @s UPDATE goods SET price=price*0.9 WHERE gno= @gno
11.1.1 存储过程概述
一般来讲,应使用SQL Server中的存储过程而不使用存储在 客户计算机本地的 T-SQL 程序,其优势主要表现在: (1)模块化程序设计。只需创建一次并将其存储在数据库中, 以后即可在程序中调用该过程任意次。 (2)加快T-SQL语句的执行速度。如果某操作需要大量 TSQL 语句或需重复执行,存储过程比批处理代码执行要快。 (3)减少网络流量。一个需要数百行 T-SQL 语句的操作由 一条执行过程代码的单独语句就可实现,而不需要在网络中 发送数百行代码。 (4)可作为安全机制使用。数据库用户可以通过得到权限来 执行存储过程,而不必给予用户直接访问数据库对象的权限。
11.1.3 创建存储过程
【例11-1】在“teaching”库创建无参存储过程,查 询每个学生各门课程的平均成绩。 USE teaching GO CREATE PROCEDURE student_avg AS SELECT sno, avg(score) as 'avgstore' FROM sc GROUP BY sno GO
11.1.3 创建存储过程
【例11-5】在“teaching”库创建带有参数和默认值(通配符) 的存储过程,从“student”表中返回指定的学生(提供姓名) 的信息。该存储过程对传递的参数进行模式匹配,如果没有 提供参数,则返回所有学生的信息。 USE teaching GO CREATE PROCEDURE Student_Name @sname varchar(40) = '%' AS SELECT * FROM student WHERE sname LIKE @sname GO
11.1.2 存储过程的类型
1.系统存储过程 存储过程在运行时生成执行方式,其后在运行时执行速 度很快。SQL Server 2005中的许多管理活动都是通过一 种特殊的存储过程执行的,这种存储过程被称为系统存 储过程。系统过程主要存储在master数据库中并以sp_为 前缀,并且系统存储过程主要是从系统表中获取信息, 从而为数据库系统管理员管理SQL Server提供支持。通 过系统存储过程,SQL Server中的许多管理性或信息性 的活动(如获取数据库和数据库对象的信息)都可以被 顺利有效地完成。
第11章 存储过程和触发器
触发器是一种特殊类型的存储过程。当有操作影响到触 发器保护的数据时,触发器就会自动触发执行。触发器 是与表紧密联系在一起的,它在特定的表上定义,并与 指定的数据修改事件相对应,它是一种功能强大的工具, 它可以扩展SQL Server完整性约束默认值对象和规则 的完整性检查逻辑,实施更为复杂的数据完整性约束。 本章主要介绍存储过程的基本概念,存储过程的创建、 修改、调用和删除操作;触发器的基本概念,触发器的 分类,触发器的创建、修改和删除,以及触发器的应用。
11.1.4 执行存储过程
2. 使用T-SQL 语句执行存储过程 EXECUTE可以简写为EXEC,如果存储过程是批处理中的 第一条语句,那么可以省略EXECUTE关键字。对于以sp_开 头的系统存储过程,系统将在master数据库中查找。如果执 行用户自定义的sp_开头的存储过程,就必须用数据库名和所 有者名限定。 EXECUTE语句的语法格式为: [ [EXEC[UTE] ] [@return_status=] procedure_name[;number] {[[@parameter=]value | [@ parameter=] @variable [OUTPUT]]} [WITH RECOMPILE ]
11.1.3 创建存储过程
在SQL Server 2005中创建存储过程主要有两种 方式:
一种方式是在SQL Server Management Studio中 创建存储过程;另一种方式是通过在查询窗口中 执行T-SQL语句创建存储过程。
11.1.3 创建存储过程
(1)打开SQL Server Management Studio,展开要创 建存储过程的数据库,展开“可编程性”选项,可 以看到存储过程列表中系统自动为数据库创建的系 统存储过程。右键单击“存储过程”选项,选择 “新建存储过程”命令。 (2)出现创建存储过程的T-SQL命令,编辑相关的命 令即可。 (3)命令编辑成功后,进行语法检查,然后单击“!” 按钮,存储过程建立成功。
11.1.3 创建存储过程
【例11-6】在“inventory”数据库创建带OUTPUT参数的存 储过程,用于计算指定的商品的平均价格,存储过程中使用 一个输入参数(商品名)和一个输出参数(平均价格)。 USE inventory GO CREATE PROCEDURE avgprice @gn varchar(20), @avgp int OUTPUT AS SELECT @avgp= avg(price) FROM goods WHERE gname=@gn GO
11.1.3 创建存储过程
【例11-3】在“teaching”库创建带参数的存储过程, 修改某个学生某门课的成绩。 USE teaching GO CREATE PROCEDURE Update_score @number char(7),@cno char(4),@score int AS UPDATE sc SET score=@score WHERE sno= @number and cno=@cno
11.1.2 存储过程的类型
2.本地存储过程 本地存储过程也就是用户自行创建并存储在 用户数据库中的存储过程,一般所说的存储过程 指的就是本地存储过程。 用户创建的存储过程是由用户创建并能完成 某一特定功能(如查询用户所需的数据信息)的存 储过程。
11.1.2 存储过程的类型
3.临时存储过程
11.1.4 执行存储过程
执行存储过程即调用存储过程,可以使用SQL Server Management Studio界面,也可以使用T-SQL 语句中的 EXECUTE命令。 1.使用SQL Server Management Studio执行存储过程 (1)打开SQL Server Management Studio,展开存储过程所 在的数据库,展开“可编程性”选项,右键单击存储过程名, 如“teaching”中的“GetStudent”,在弹出的快捷菜单中选择 “执行存储过程”命令。 (2)进入“执行过程”对话框,输入要查询的学生的sno,如 “1302001” 。 (3)单击“确定”按钮。
(1)本地临时存储过程 不论哪一个数据库是当前数据库,如果在创建存储过程 时,其名称以“#”号开头,则该存储过程将成为一个存 放在tempdb数据库中的本地临时存储过程。 (2)全局临时存储过程 不论哪一个数据库是当前数据库,只要所创建的存储过 程名称是以两个“#”号开头,则该存储过程将成为一个 存储在tempdb数据库中的全局临时存储过程。
11.1 存储过程
SQL Server 2005的存储过程(Stored Procedure)就是一个 具有独立功能的子程序,以特定的名称存储在数据库中。 可以在存储过程中声明变量、有条件地执行以及其他各项 强大的程序设计功能。
11.1.1 存储过程概述
存储过程是T-SQL语句和可选流程控制语句的预编译集合, 它以一个名称存储并作为一个单元处理,能够提高系统的 应用效率和执行速度。SQL Server提供了许多系统存储过 程以管理SQL Server和显示有关数据库和用户的信息。
11.1.2 存储过程的类型
4.远程存储过程 在SQL Server 2005中,远程存储过程是位于远程 服务器上的存储过程,通常可以使用分布式查询和 EXECUTE命令执行一个远程存储过程。 5.扩展存储过程 扩展存储过程是用户可以使用外部程序语言(例如 C语言)编写的存储过程。显而易见,扩展存储过 程可以弥补SQL Server 2005的不足,并按需要自行 扩展其功能。
相关文档
最新文档