您的当前位置:首页正文

SQL Server存储过程剖析

2023-08-04 来源:帮我找美食网
维普资讯 http://www.cqvip.com

2007年8月 广西轻工业 GUANGXI JOURNAL OF LIGHT INDUSTRY 计算机与信息技术 第8期(总第105期) SQ L Server存储过程剖析 吴彦国 (河南省轻工业职工大学,河南郑州,450002) 【摘 要】存储过程在SQL Server数据库中是一个重要概念。存储过程封装了数据库事务处理程序,存储过程运行于主 机并能被调用。因此,在程序开发和设计中,大大减少前台程序开发和设计的工作量;其安全性高,并可设定用户使用权限。 【关键词】 系统存储过程;用户自定义的存储过程;存储过程的传回值 【中图分类号】TP393.12 【文献标识码】A 【文章编号】1003—2673(2o07)08一o065一O2 存储过程在SQL Server中使用灵活,应用广泛。存储过程 提供了一种封装某一个需要重复执行任务的方法。一旦定义了 一sqlstatement —个存储过程之后,在应用程序中就可以对其进行调用。在存 其中,output,表示此参数是可传回的。with{recom— pilelencryption}选项中的recompile表示每次执行此存储过程 时都重新编译一次,encryption所创建的存储过程的内容会被 加密。 如: 储过程中,不仅可以包含程序流、逻辑以及对数据库的查询,而 且也可以接受参数、输出参数、返回单个或多个结果集。 SQL Server中存储过程的种类有系统存储过程、扩展存储 过程和用户自定义的存储过程。系统存储过程以SP一开头,用 来进行系统的各项设定、取得信息,相关管理工作,如SP—help 就是取得指定对象的相关信息;扩展存储过程以XP一开头,用 来调用操作系统提供的功能,如exec master~xp cmdshell ’ping 10.8.16.1’;用户自定义的存储过程,这是我们所指的存储 过程。 表book的内容如下 编号 O01 书名 C语言入门价格 ¥30 002 PowerBuilder报表开发¥52 通过设计自定义用户存储过程,用户可以使其实现强大的 编程功能。使用存储过程可以比单独的SQL语句完成更为复 杂的功能,并且系统会对存储过程中的SQL语句进行了预编 译处理,使得执行速度有了大幅度的提升。存储过程被第一次 调用后,会保存在高速缓冲区中,这样再次执行同一个存储过 程时,会提高了重复调用的效率。在实际应用中,可以将复杂的 商业规则封装在存储过程中,从而提高程序语句的利用率。 存储过程与一般的SQL语句有这样一些优点:存储过程 只在创造时进行编译,以后每次执行存储过程都不需再重新编 译,而一般SQL语句每执行一次就编译一次,所以使用存储过 程可提高数据库执行速度;当对数据库进行复杂操作时f如对 多个表进行Update,Inser ̄,Query,Delete时),可将此复杂操作 用存储过程封装起来与数据库提供的事务处理结合一起使用; 存储过程可以重复使用,可减少数据库开发人员的工作量;安 全性高,可设定只有某些用户才具有对指定存储过程的使用 权。 gO 实例1:创建查询表Book的内容的存储过程。 在查询分析器输入如下命令: create proc query—book as select from book 执行存储过程: exec query—book 通过执行query—book存储过程可以查询表Book的内容。 实例2:加入一笔新记录到表book,并查询此表中所有书 籍的总金额。 在查询分析器输入如下命令: Create proc insertbook ..@param1 char(10),@param2 varchar(20),@param3 money. @param4 money output with encryption一…as 一…一力Ⅱ密 用户自定义存储过程的方法既可以通过企业管理器。也可 以通过使用CREATE PROCEDRUE语句的方式来创建存储 insert book(编号,书名,价格)Values(@param1,@param2。 @param3) 过程。通过企业管理器比较容易,下面主要论述一下怎么使用 命令语句创建存储过程。它的格式是: Create procedure procedue—select@param4=sum(价格)from book gO name 执行存储过程: declare@total—price money exec insert—[@parameter data—type][output] [With]{recompilelencryption1 book’003‘,’Delphi控件开发指南’.¥1 00,@to— I作者简介】吴彦国(1971一),男,河南郑州人,河南省轻工业职工大学计算机系教师,研究发向:数据库管理与开发。 65 维普资讯 http://www.cqvip.com

tal—price print’总金额为’+convert(varcha r'@totaJ—price) go 通过执行insert—book存储过程可以加入一笔新记录,并 查询出Book表中所有书籍的总金额。 实例3:设有两个表为Products、Orders,其表内容如下: Products 产品蛾号 客户名 客享I订金 请实现按编号为连接条件,将两个表连接生成一个新表 temptable,该表只含编号,产品名,客户名,订金,总金额(总金 额:订金・订数)。 在查询分析器输入如下命令建立存储过程: Create proc temp .sale a8 select Products.产品编号,产品名称,客户名,客户订金,客户订 数・客户订金as总金额 into temptable from Products inner join orders on Products.产 品编号=orders.产品编号 if@@error=O print’Good’ else go 执行存储过程temp—sale后即生成一个新表temptable。 最后,我们应注意存储过程的传回值。存储过程的传回值有 3种方式:以Return传回整数;以Output格式传回参数; Recordset方式。Output和Return都可在批次程式中用变量 接收.而Recordset则传回到执行批次的客户端中。下面例子 介绍了Output格式传回参数。 高校新生数据库中的表“某高校新生基本情况”结构与数 据如下: 在查询分析器输入如下命令建立存储过程student: use高校新生 ifexists(select name from sysobjects where name=’student’and type=’P’) drop procedure student g0 create procedure student @goodname varchar(20), @maxage int output, @avgage int output a8 select@maxage=max(年龄),@avgage=avg(年龄)from某高校 新生基本情况where性别=@goodname go 执行存储过程student: declare@aa varchar(20),@bb int,@cc int select@aa=’女’  ・execute student@aa,@bb output.@cc output select’学生性别:’+@a a't最大年龄:’+cast(@bb as char(6)),’平 均年龄:’+cast(@cc as cha ̄4)) 执行存储过程student后,将查询出女生的最大年龄、平均 年龄。其中,变量@goodname获取参数@aa的值“女”,输出变 量@maxage和@avgage将值依次输出给变量@bb和@cc。 由此我们看出,存储过程就是将常用的或很复杂的工作, 预先用SQL语句写好并用一个指定的名称存储起来,那么以 后要叫数据库提供与已定义好的存储过程的功能相同的服务 时,只需调用存储过程,即可自动完成命令。它跟函数调用差不 多。 参考文献 【1】耿文兰.SQL Server 2000数据库管理与开发【M】.,gq-工业出版社, 2006,1 0. 【2】蒋秀英.SQL Server 2000数据库与应用【M】.清华大学出版社, 2006.2. 【3]赵增民.SQL Server2000实用教程【M】・电子.Y-.tl:出版社.2006,1. 

因篇幅问题不能全部显示,请点此查看更多更全内容