第10章存储过程概论
- 格式:doc
- 大小:159.50 KB
- 文档页数:12
第10章存储过程存储过程是SQL语句和可选控制流语句的预编译集合,它以一个名称存储并作为一个单元处理。
本章介绍存储过程的创建、执行、修改和删除等。
10.1 概述存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。
存储过程可以使对数据库的管理,以及显示关于数据库及其用户信息的工作容易得多。
存储过程可包含程序流、逻辑以及对数据库的查询。
它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点:可以在单个存储过程中执行一系列SQL语句。
可以从自己的存储过程内引用其他存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,且能减少网络通信的负担。
10.2创建存储过程要使用存储过程,首先要创建一个存储过程。
可以使用Transact-SQL 语言的CREATE PROCEDURE语句,也可以使用企业管理器或者存储过程创建向导来完成。
1.使用CREATE PROCEDURE语句创建存储过程CREATE PROCEDURE语句的语法格式为:CREATE PROC[EDURE ] procedure_name [; number][ {@parameter data_type}[VARYING ][ = default][OUTPUT]][,…n][WITH{RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION}][FOR REPLICATION]AS sql_statement […n ]其中各参数含义如下:procedure_name新存储过程的名称。
number 是可选的整数,用来对同名的过程分组,以便用一条DROP PROCEDURE语句即可将同组的过程一起除去。
例如,名为orders的应用程序使用的过程可以命名为orderproc;1、orderproc;2等。
存储过程概述什么是存储过程?存程是命名的T-SQL句的集合.它支持任何T-SQL言,包括流程控制言、DDL、DML和DCL等。
此外可以支持参数化的定内容,接受入参数并以出参数的格式向用程或批理返回多个。
使用存程可以提高性能。
例如,如果一个有五行文本,但同有5000个用同,必会增加网通信流,造成堵塞。
使网速度大大减慢。
如何减少网通信流呢?我可以将句放在存程里,存在服器上,用在只需要在客端行一条运行存程句即可,提高了用找速度。
使用存程大多是运用在重复性的操作中〔例如每个学生的成信息〕,到达一次开屡次使用,降低程序重复开。
此外使用存程可以加速整个运行的效率。
存程建后,就会将定内容存在数据中。
除第一次使用之外,其余情况可以直接从程序存中取得已行的程序,免去再一次。
使用存程能化数据管理。
当需要修改,只需要在服器上修改一次即可,不需要在所有客机器上行修改。
此外,使用存程可以增数据平安性。
用程序可以在没有象的限下,配合存程的控制行有限度地存取,以防止敏感数据〔如学生成表的成〕被任意与修改。
用户自定义存储过程创立存程分系存程和用自自定存程两大,本任主要介自定存程的建和行。
1〕建和行不参数的存程最容易生成和使用的存程是返回果集而不需要任何参数。
如所有学生成。
建不参数的存程法:CREATEPROCEDURE存程名AST-SQL句行不参数的存程只需要行代“EXEC存程名〞即可。
〔2〕建和行入参数的存程接受入参数,返回数据集的存程,种存程最常用,一般配合前端用程序行用,通指定入参数SELECT句将行果以数据集的方式返回前端用程序。
如根据学生的学号,某个学生的考成。
在定入参数,可出缺省。
建入参数存程法:CREATEPROCEDURE存程名〔参数1,⋯,参数n〕AST-SQL句参数使用方法如下:@参数名数据型[=默]行入参数的存程,需将入参数。
例如,将“学号〞存程。
如果不,默是缺省〔如果有缺省〕。
执行带参数的存储过程语法:EXEC存储过程名@参数名=值在执行存储过程时指定参数名称允许按任意顺序提供参数。
第10章存储过程和触发器【学习目标】本章将要学习存储过程和触发器的基本概念、作用和基本操作。
本章学习要点:◆存储过程的概念、作用、分类;◆存储过程的创建、查看、修改和执行;◆触发器的主要作用、类型;◆inserted表和deleted表的作用和使用;◆触发器的创建方法、查看、修改和执行。
【学习导航】存储过程(Store Procedure)和触发器(Trigger)是SQL Server 数据库系统重要的数据库对象,在以SQL Server 2005 为后台数据库创建的应用程序中具有重要的应用价值。
本章主要内容见图10-1所示的学习导航。
图10-1 本章内容学习导航10.1 存储过程概述Transact-SQL语言是应用程序与SQL Server数据库之间的主要编程接口,大量的时间将花费在Transact-SQL 语句和应用程序代码上。
在很多情况下,许多代码被重复使用多次,每次都输入相同的代码不但繁琐,更由于在客户机上的大量命令语句逐条向SQL Server 发送,将降低系统运行效率。
因此,SQL Server提供了一种方法,它将一些固定的操作集中起来由SQL Server数据库服务器来完成,应用程序只需调用它的名称,就可实现某个特定任务,这种方法就是存储过程。
下面将详细介绍存储过程的概念、特点、创建、执行等内容。
10.1.1 存储过程的概念SQL SERVER 中T-SQL语言为了实现特定任务而将一些需要多次调用的固定的操作编写成子程序并集中以一个存储单元的形式存储在服务器上,由SQL Server数据库服务器通过子程序名来调用它们,这些子程序就是存储过程。
存储过程是一种数据库对象,存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行,具有很强的编程功能。
存储过程可以使用EXECUTE语句来运行。
在SQL Server中使用存储过程而不使用存储在客户端计算机本地的T-SQL程序有以下几个方面的好处。
第10章存储过程关键词:存储过程创建存储过程执行存储过程存储过程的参数查看存储过程修改存储过程删除存储过程学习要求:本章主要阐述了存储过程的创建和使用方法。
并且全面地、系统地介绍了存储过程的概念、存储过程的优点;系统存储过程的特点及用途;创建存储过程的方法;查看、修改和删除存储过程的方法。
重点分析了存储过程的创建和使用方法。
学习和掌握本章,是对SQL Server 2000数据库的灵活运用。
10.1 概述1、存储过程——是为实现某个特定任务而编写的一段代码。
2、存储过程的特点:● 可以包含一条或多条Transact-SQL语句。
● 可以接受输入参数并可以返回输出值。
● 一个存储过程可以调用另一个存储过程。
● 会返回执行情况的状态代码给调用它的程序。
3、存储过程的优点:● 实现模块化编程。
一个存储过程可以被多个用户共享和重用。
● 加快程序的运行速度。
第一次执行后的存储过程会在缓冲区中创建查询树,使得第二次执行时不用进行预编译。
● 可以减少网络流量。
存储过程存储在服务器上,只有触发执行存储过程的命令和返回结果才在网络上传输。
● 可以提高数据库安全性。
可以只授予用户访问存储过程的权限,而不授予其直接修改数据表的权限。
3、存储过程的分类:● 系统存储过程。
由系统自动创建,主要存储在master数据库中,一般以sp_为前缀。
系统存储过程完成的功能主要是从系统表中获取信息。
● 用户自定义存储过程。
由用户创建并能完成某一特定功能的存储过程。
10.2 创建存储过程1、使用CREATE PROCEDURE语句创建存储过程格式:CREATE PROC[EDURE ] procedure_name [; number][ {@parameter data_type}[VARYING ][ = default][OUTPUT]][,…n][WITH{RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION}][FOR REPLICATION]AS sql_statement […n ]其中各参数含义如下:● procedure_name:新存储过程的名称。
● number:对同名的过程分组。
● @parameter:过程中的参数。
可以声明一个或多个参数。
存储过程最多可以有2100个参数。
● data_type:参数的数据类型。
● VARYING:指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。
仅适用于游标参数。
● default:参数的默认值。
如果定义了默认值,不必指定该参数的值即可执行过程。
默认值必须是常量或NULL。
● OUTPUT:表明参数是返回参数。
该选项的值可以返回给EXE[UTE]。
使用OUTPUT参数可将信息返回给调用过程。
● RECOMPILE:表明SQL Server不会缓存该过程的计划,该过程将在运行时重新编译。
● ENCRYPTION:表示SQL Server加密syscomments表中包含CREATE PROCEDURE语句文本的条目。
● FOR REPLICATION:指定不能在订阅服务器上执行为复制创建的存储过程。
● sql_statement:过程中要包含的任意数目和类型的Transact-SQL语句。
但有一些限制。
创建存储过程时应该注意下面几点:● 存储过程的最大大小为128MB。
● 用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在tempdb中创建)。
● 在单个批处理中,CREATE PROCEDURE语句不能与其他Transact-SQL语句组合使用。
● 存储过程可以嵌套使用,在一个存储过程中可以调用其他的存储过程。
嵌套的最大深度不能超过32层。
● 存储过程如果创建了临时表,则该临时表只能用于该存储过程,而且当存储过程执行完毕后,临时表自动被删除。
● 创建存储过程时,“sq_statement”不能包含下面的Transact-SQL语句:SET SHOWPLAN_TEXT、SET SHOWMAN_ALL、CREATE VIEW、CREATE DEFAULT、CREATE RULE、CREATE PROCEDURE和CREATE TRIGGER。
例1:创建用于检索所有学生的成绩记录的存储过程stud_degree。
USE school--判断stud_degree存储过程是否存在,若存在,则删除IF EXISTS (SELECT name FROM sysobjectsWHERE name = ’stud_degree’ AND type =’P’)DROP PROCEDURE stud_degreeGOUSE schoolGO--创建存储过程stud_degreeCREATE PROCEDURE stud_degree /* 无参过程 */ASSELECT student.sno,student.sname,ame,score.degreeFROM student,course,scoreWHERE student.sno=score.sno AND o=oORDER BY student.snoGO通过下述SQL语句执行该存储过程:USE school--判断stud_degree存储过程是否存在,若存在,则执行它IF EXISTS (SELECT name FROM sysobjectsWHERE name = ’stud_degree’ AND type =’P’)EXEC stud_degreeGO例2:创建一个带有参数的存储过程stu_info,该存储过程根据传入的学生编号,在student表中查询此学生的信息。
USE school--判断stud_info存储过程是否存在,若存在,则删除IF EXISTS (SELECT name FROM sysobjectsWHERE name = ’stud_info’ AND type =’P’)DROP PROCEDURE stud_infoGOUSE schoolGO--创建存储过程stud_infoCREATE PROCEDURE stud_info@s_no char(5) /* 有参过程·形参 */ASSELECT *FROM studentWHERE sno=@s_noGO通过下述SQL语句执行该存储过程:USE school--判断stud_info存储过程是否存在,若存在,则执行它IF EXISTS (SELECT name FROM sysobjectsWHERE name = ’stud_info’ AND type =’P’)EXEC stud_info ‘105’/*实参*/GO例3:创建一个带有参数的存储过程stu_age,该存储过程根据传入的学生编号,在student表中计算此学生的年龄,并根据程序的执行结果返回不同的值,程序执行成功,返回整数0,如果执行出错,则返回错误号。
USE school--判断stud_age存储过程是否存在,若存在,则删除IF EXISTS (SELECT name FROM sysobjectsWHERE name = ’stud_age’ AND type =’P’)DROP PROCEDURE stud_ageGOUSE schoolGO--创建存储过程stud_ageCREATE PROCEDURE stud_age@s_no char(5), /* 有参过程 */@age int OUTPUT /* 返回参数 */AS-- 定义并初始化局部变量,用于保存返回值DECLARE @errorvalue intSET @errorvalue=0-- 求此学生的年龄SELECT @age=YEAR(GETDATE())-YEAR(sbirthday)FROM studentWHERE sno=@s_no-- 根据程序的执行结果返回不同的值IF (@@ERROR<>0)SET @errorvalue=@@ERRORRETURN @errorvalue /* 带回结果值 */GO该过程的调用在后面介绍。
2、使用企业管理器创建存储过程使用企业管理器创建存储过程的操作步骤如下:(1)打开企业管理器,展开服务器组,并展开相应的服务器。
(2)打开“数据库”文件夹,并打开要创建存储过程的数据库。
(3)选择“存储过程”选项,右击鼠标,执行“新建存储过程”命令,打开创建存储过程对话框。
(4)在“文本”列表框中显示了CREATE PROCEDURE语句的框架,可以修改要创建的存储过程的名称,然后加入存储过程所包含的SQL语句。
(5)单击“检查语法”按钮可以检查创建存储过程的SQL语句的语法是否正确。
(6)如果要将其设置为下次创建存储过程的模板,可单击“另存为模板”按钮。
(7)完成后,单击“确定”按钮即可创建一个存储过程,如下图10-1所示。
图10-1存储过程属性界面3、使用向导创建存储过程使用向导创建一个存储过程insert_table8_1,对应的操作步骤如下:(1)在企业管理器中,执行“工具”下拉菜单中的“向导”命令,打开“选择向导”对话框。
(2)在“数据库”文件夹选择“创建存储过程”向导,单击“确定”按钮,出现创建存储过程向导欢迎对话框。
单击“下一步”按钮。
(3)在出现“选择数据库”对话框中,选择数据库后,单击“下一步”按钮,如下图10-2所示。
图10-2选择向导界面(3)在出现“选择数据库”对话框中,选择数据库后,单击“下一步”按钮,如下图10-3所示。
图10-3创建存储过程向导1(4)在出现“选择存储过程”对话框中列出了所有表,以及可以对表进行的插入、删除和更新操作。
可以通过选中每个表对应的复选框来确定要对表进行的操作。
例如,选择table8表后面的“插入”、“删除”、“更新”栏中的复选框。
单击“下一步”按钮,如下图10-4所示。
图10-4创建存储过程向导2(5)出现“正在完成创建存储过程向导”对话框。
若单击“完成”按钮,即可完成存储过程的创建,如下图10-5所示。
图10-5创建存储过程向导3(6)单击“编辑”按钮,打开“编辑存储过程属性”对话框,可编辑存储过程,如下图10-6所示。
图10-6编辑存储过程属性(7)单击“编辑SQL”按钮,即可打开“编辑存储过程SQL”对话框,其中的列表框显示了创建该存储过程的Transact-SQL语句,可以在已有的Transact-SQL语句的基础上进行编辑,可以单击“分析”按钮来执行语法检查,如下图10-7所示。
图10-7编辑存储过程SQL(8)单击“确定”按钮,返回到前面的“正在完成创建存储过程向导”对话框。