董晓涛(David Dong)

博客园 首页 新随笔 联系 订阅 管理
 

SQL SERVER资料之八:数据库实现存储过程

 

这是我初学时候的笔记,帖出来抛砖引玉!如果大家感觉有用的话,我将整理出下一个版本! 
CHAPTER 9 
实现存储过程
1
 存储过程是存储在服务器上的TSQL语句的预编译集合。它是封装重复性工作的一种方法;它包括有五种类型(系统存储过程,本地存储过程,临时存储过程,远程存储过程,扩展存储过程)
它和其它编程语言的过程一样,包含自己操作的语句,同时可以接受参数,返回状态值给调用的语句来标识成功或失败!也可以返回一个或者多个值给调用的语句!
优点:
存储过程大大减少了执行需要的资源和时间要求。提供了安全机制,改进性能,共享应用程序逻辑,防止用户暴露数据库表的细节,减少网络流量!
2
 下面我们来看看如何创建,执行,修改和删除存储过程:
创建:我们可以使用create procedure来创建存储过程,在创建存储过程的时候,我们可以参照表,临时表,视图,用户自定义函数和其它存储过程!根据可使用的内存,存储过程最大的尺寸为128M。如果在存储过程中创建了本地临时表,则在存储过程执行完毕后消失!
Create proc dbo.overdueonders
As 
   Select * from dbo.orders
        Where requiredata<getdate() and shipeddate is null
Go
执行:通过存储过程自身或存储过程作为insert语句的一部分,我们可以执行我们的存储过程。
修改和删除存储过程:
存储过程要经常被修改以反映底层表的改变和用户的要求的变化,为了修改现有的存储过程并保留许可权限,我们使用alter procedure语句。这时SQL SERVER将覆盖存储过程的前一定义!
在删除存储过程前,使用sp_depends来确定对象是否依赖于存储过程!drop procedure [procedure][,….n]
3.
在存储过程中使用参数:
1
.使用输入参数:我们应该为参数提供合适的默认值。这样用户可以不指定参数就执行存储过程!在存储过程开始时,所有的参数都要被检查,以尽早发现丢失的和无效的值!
2
.使用输入参数来执行存储过程:我们使用带有参数的EXEC语句来执行存储过程。在传递参数时我们可以通过参数名传递值或者是通过定位传递参数来把参数传递给存储过程!如果我们使用参数名传递值我们不用考虑参数的次序!如果考虑参数的次序!如果通过定位传递参数的话,参数的值要以我们创建存储过程时的次序列出,不能够破坏次序!如我们的存储过程有五个参数,我们可以省略第四个和第五个参数,但是我们不能够省略第四个参数而指定第五个参数!
3
.使用输出参数返回值:存储过程可以返回多个值,每个值都必须使用output关键字在存储过程和调用语句来为对象定义!如果我们在执行存储过程时,output关键字被忽略,存储过程依然会执行只是不返回值!除了text或是IMAGE,参数可以是任何数据类型!调用语句要包括一个变量来接受返回值!
4
.明确的重编译存储过程:如果我们的存储过程的参数返回较大变化的结果集,新的索引被添加到存储过程获益的底层表中,我们可以进行明确的重编译。
  Create proc …[with recompile]:这时我们不为存储过程缓存计划,每次执行时选项重编译存储过程!
  Exec proc_name with recompile:在存储过程执行时重编译该存储过程
  Sp_recompile [ @objname = ] 'object': 使存储过程和触发器在下次运行时重新编译。是当前数据库中的存储过程、触发器、表或视图的限定的或非限定的名称。object  nvarchar(776) 类型,无默认值。如果 object 是存储过程或触发器的名称,那么该存储过程或触发器将在下次运行时重新编译。如果 object 是表或视图的名称,那么所有引用该表或视图的存储过程都将在下次运行时重新编译。
SQL
 SERVER资料之八:数据库实现存储过程
我们可以使用DBCC FREEPROCCACHE来从缓存中清除所有的存储过程!
4.
执行扩展的存储过程:扩展的存储过程是DLL内的函数,可以使用SQL SERVER的功能,它们与其它存储过程的执行过程相同,并支持输入参数,返回状态代码和输入参数!如:我们使用xp_cmdshell来执行扩展存储过程,通过执行dir系统操作命令,显示文件和子目录列表:exec master..xp_cmdshell ‘dir c:\’
     
我们只能从master数据库或是明确指定master数据库的集团,来执行扩展的存储过程,也可以创建用户定义的存储过程来调用扩展的存储过程,这样允许在任何数据库中执行扩展的存储过程!
5
.处理错误信息:为了增强存储过程的效率,应该包括与用户进行事务状态交互的错误信息。
   1Return:无条件地退出查询或过程。
      2.sp_addmessage
:创建定制的错误信息。
   3.@@error:包括最近执行语句的错误编号。
   4RAISRROR:返回用户定义的错误信息或系统错误信息。设置纪录错误的系统标志。
6
.性能考虑:在实现存储过程时,应该意识到一些性能问题。我们可以使用以下工具帮助查找与存储过程的执行相关的性能问题原因:
   1Windows 2000系统监视器:对象:SQL SERVER缓存管理器和SQL统计(SQL重编译每秒)。
   2SQL Profiler:是一企图像工具,允许进行事件的监视,例如在存储过程开始或结束时,或在存储过程中的单个TSQL语句的开始或结束时。可以监视事件,可以被存储过程中的每个语句检测。

 

―――董晓涛―

posted on 2004-11-26 11:39  董晓涛  阅读(539)  评论(0编辑  收藏  举报