陈潇
摘 要:在应用程序开发过程中,如何避免客户机执行大量的数据访问工作,提高客户端的工作效率,是程序设计者需要考虑的问题。本文介绍了SQL Server 2008中存储过程的含义及优点,并通过具体实例向读者介绍存储过程的具体应用,从而在系统开发时能够灵活运用存储过程提高效率。
关键词:SQLServer;数据库;存储过程
中图分类号:TP311.13 文献标识码:A
1 引言(Introduction)
当应用程序需要访问服务器上的数据时,在不建立存储过程的条件下。通过网络将Transact-SQL语句发送至服务器,服务器对语句编译后在传递给客户端。这种方式对于大量数据处理的事务,增加了网络上的传输量,加重了客户端的工作负担[1]。
存储过程是一组Transact-SQL语句,编译在单个执行计划中。它在服务器端对数据库记录进行处理,然后将结果发给客户端。这样,既充分利用了服务器强大的计算能力,也避免应用程序执行时需要将大量数据从服务器下载到客户端,减少了网络上的传输量,同时也提高了客户端的工作效率。
存储过程具有以下优点:
(1)通过本地存储、代码预编译和缓存技术实现高性能的数据操作。
(2)如果业务规则发生了改变,可以通过修改存储过程来适应新的业务规则,而不必修改客户端应用程序。
(3)通过隔离和加密的方法提高了数据库的安全性。数据库用户可以通过得到权限来执行存储过程,而不必给予用户直接访问数据库对象的权限。
存储过程按返回的数据类型,可分为两类:一类类似于SELECT语句,用于查询数据,查询到的数据以结果集的形式给出;另一类存储过程是通过输出参数返回信息,或不返回信息只执行一个动作。
2 简单存储过程的建立(The process of establishing
a simple stored procedure)
创建简单存储过程的基本语法如下:
CREATE PROCEDURE存储过程名
[WITH ENCRYPTION]
[WITH RECOMPILE]
AS
SQL语句
案例1:为了方便对客户订购信息的查询,我们建立一个存储过程khdg,功能是查询订单信息表中客户订购的相关信息。在查询设计器中运行如下命令:
Create procedure dbo.khdg
As
Select姓名,地址,订购数量=sum(数量)from订单信息groupby客户编号
执行该存储过程的具体代码如下:
Execute procedure khdg
3 带参数的存储过程(The stored procedure with
parameters)
向存储过程指定输入、输出参数的主要目的是通过参数向存储过程输入和输出信息来扩展存储过程的功能[2]。通过使用参数,可以多次使用同一存储过程并按用户要求查找所需要的结果。
3.1 建立带参数存储过程
声明带输入参数的存储过程的语法格式如下。
CREATEPROCEDURE存储过程名
@参数名 数据类型[=默认值][,...n]
[WITHENCRYPTION]
[WITHRECOMPILE]
AS
SQL语句
其中“@参数名”和定义局部变量一样,必须以符号@为前缀,要指定数据类型,多个参数定义要用“,”隔开。
案例2:为了方便统计销售员在订单信息表中的签单个数,我们自定义一个存储过程Qdgs,该存储过程的功能是:接受客户端传递的销售人员编号,在服务器端完成该销售人员签单个数的查询后,将结果返回给用户。在查询设计器中运行如下命令:
CreateprocedureQdgs
@xsghint
Select签单个数=count(*)from订单信息where销售工
号=@xsgh
Groupby销售工号
案例3:建立一个多参数存储过程Khdg,功能是:接收用户输入的客户姓名和年份,查询该客户在指定查询年份内的订购信息,返回给客户端。
CreateprocedureKhdg
@khxmvarchar(6),@nfint
Select客户姓名=姓名,货品名称=名称,订货日期,数量,总金额
From客户信息,订单信息,货品信息
Where客户信息.编号=订单信息.客户编号and订单信息.货品编码=货品信息.编码and客户信息.姓名=@khxmanddatepart(yy,订购日期)=@nf
3.2 执行存储过程
在执行存储过程的语句中,有两种方式来传递参数值,分别是使用参数名传递参数值和按参数位置传递参数值。
使用参数名传递参数值,是通过语句“@参数名=参数值”给参数传递值。
3.2.1 使用参数名传递参数
执行案例2的存储过程
Execute procedureQdgs @xsgh=1
执行结果如图1所示。
图1 存储过程执行结果
Fig.1 Perform stored procedures
3.2.2 按位置传递参数
执行案例3的存储过程:Execute procedureKhdg‘李红,‘2003
执行结果如图2所示。
图2 带输入参数的存储过程执行结果
Fig.2 The results of the stored procedure with the input
parameters are implemented
4 带输出参数的存储过程
如果我们需要从存储过程中返回一个或多个值,可以通过在创建存储过程的语句中定义输出参数来实现,为了使用输出参数,需要在CREATEPROCEDURE语句中指定OUTPUT关键字。
声明带输出参数的存储过程的语法格式如下。
CREATEPROCEDURE 存储过程名
@参数名 数据类型[VARYING][=默认值]OUTPUT[,...n]
[WITHENCRYPTION]
[WITHRECOMPILE]
AS
SQL语句
案例4:建立一个存储过程Rqcx,功能是通过接收用户输入的订单号,来查询该笔订单到从订购到发货共历时多少天。
CreateprocedureRqcx
@ddh output int,@ts bigint output
As
Declare @dhrq datetime,@jhrq datetime
Select@dhrq=订货日期,@jhrq=交货日from订单信息where订单号=@ddh
Set@ts=datediff(dd,@dhrq,@jhrq)
Print'订单号为:'+@ddh+'的订单,从签单到发货共历时:'+@ts+'天'
执行案例4的存储过程:Execute procedureKhdg‘1
执行结果如图3所示。
图3 带输出参数的存储过程执行结果
Fig.3 The results of the stored procedure with output
parameters are implemented
5 结论(Conclusion)
通过存储过程,提高了客户端的工作效率,增强系统的可维护性。在保证服务器端数据安全的前提下,体现了数据的一致性和完整性[3]。在进行程序设计和数据库管理工作时,可根据实际情况灵活运用存储。
参考文献(References)
[1] 万波,周顺平.SQL+SERVER扩展存储过程实现机制及应用 方法初探[J].武汉科技大学学报(自然科学版),2000(3):294-296.
[2] 梁德胜,杨晓燕,陈春娥.基于SQL Server的扩展存储过程[J].现 代电子技术,2004,27(21):22-23.
[3] 宋世斌,李存华.SQL Server中存储过程技术的研究与应用[J]. 电脑知识与技术(学术交流),2007,1(12):327-329.
作者简介:
陈 潇(1983-),男,硕士,讲师.研究领域:数据库管理,管
理信息系统.