联机丛书:存储过程及其创建

来源:互联网 发布:caj转换word软件 编辑:程序博客网 时间:2024/06/08 23:14
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
 存储过程可以使得对的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。

可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点:可以在单个存储过程中执行一系列SQL语句。
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
存储过程的功能取决于数据库所提供的功能。
创建存储过程
可使用Transact-SQL语句CREATEPROCEDURE创建存储过程。创建存储过程前,请考虑下列事项:不能将CREATEPROCEDURE语句与其它SQL语句组合到单个批处理中。
创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。
存储过程是数据库对象,其名称必须遵守标识符规则。
只能在当前数据库中创建存储过程
创建存储过程时,应指定:所有输入参数和向调用过程或批处理返回的输出参数。
执行数据库操作(包括调用其它过程)的编程语句。
返回至调用过程或批处理以表明成功或失败(以及失败原因)的状态值。系统存储过程
Microsoft®SQLServer™2000中的许多管理活动是通过一种称为系统存储过程的特殊过程执行的。系统存储过程在master数据库中创建并存储,带有sp_前缀。可从任何数据库中执行系统存储过程,而无需使用master数据库名称来完全限定该存储过程的名称。

强烈建议您不要创建以sp_为前缀的存储过程。SQLServer始终按照下列顺序查找以sp_开头的存储过程:在master数据库中查找存储过程
根据所提供的任何限定符(数据库名称或所有者)查找该存储过程
如果未指定所有者,则使用dbo作为所有者查找该存储过程
因此,虽然当前数据库中可能存在带sp_前缀的用户创建的存储过程,但总会先检查master数据库(即使该存储过程已用数据库名称限定)。



 重要  如果用户创建的存储过程与系统存储过程同名,则永远不执行用户创建的存储过程


分组
如果将一个不同的标识号赋予某过程,则可以用与现有某存储过程相同的名称创建该过程,这样可允许将这些过程进行逻辑分组。同名的分组过程可以同时删除。在同一应用程序中使用的过程一般都以该方式分组。例如,用于my_app应用程序的过程可能被命名为my_proc;1、my_proc;2等。删除my_proc即删除该整个组。将过程分组后,就无法删除该组内的单个过程。
临时存储过程
专用和全局临时存储过程与临时表类似,都可以用向该过程名称添加#和##前缀的方法进行创建。#表示本地临时存储过程,##表示全局临时存储过程。SQLServer关闭后,这些过程将不再存在。

临时存储过程在连接到SQLServer的早期版本时很有用,这些早期版本不支持再次使用Transact-SQL语句或批处理执行计划。连接到SQLServer2000的应用程序应使用sp_executesql系统存储过程,而不使用临时存储过程。有关更多信息,请参见执行计划的高速缓存和重新使用。

只有创建本地临时过程的连接才能执行该过程,当该连接关闭(用户从SQLServer中注销)时,将自动删除该过程。

任何连接都可执行全局临时存储过程。只有创建该过程的用户所用的连接关闭,并且所有其它连接所用的该过程的当前执行版本运行完毕后,全局临时存储过程才不再存在。一旦用于创建该过程的连接关闭,将不再允许启动执行该全局临时存储过程。只允许那些已启动执行该存储过程的连接完成该过程的运行。

如果直接在tempdb数据库中创建没有#或##前缀的存储过程,则由于每次启动SQLServer时tempdb都要重新创建,因此当关闭SQLServer时将自动删除该存储过程。直接在tempdb中创建的过程即使在创建该过程的连接终止后也会存在。与任何其它对象一样,可向其他用户授予、拒绝和废除执行该临时存储过程的权限。1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击