存储过程学习二(创建存储过程)
2006-08-22 09:06
537 查看
可使用 Transact-SQL 语句 CREATE PROCEDURE 创建存储过程。创建存储过程前,请考虑下列事项:
不能将 CREATE PROCEDURE 语句与其它 SQL 语句组合到单个批处理中。
创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。
存储过程是数据库对象,其名称必须遵守标识符规则。
只能在当前数据库中创建存储过程。
创建存储过程时,应指定:
所有输入参数和向调用过程或批处理返回的输出参数。
执行数据库操作(包括调用其它过程)的编程语句。
返回至调用过程或批处理以表明成功或失败(以及失败原因)的状态值。
系统存储过程
Microsoft® SQL Server™ 2000 中的许多管理活动是通过一种称为系统存储过程的特殊过程执行的。系统存储过程在 master 数据库中创建并存储,带有 sp_ 前缀。可从任何数据库中执行系统存储过程,而无需使用 master 数据库名称来完全限定该存储过程的名称。
强烈建议您不要创建以 sp_ 为前缀的存储过程。SQL Server 始终按照下列顺序查找以 sp_ 开头的存储过程:
在 master 数据库中查找存储过程。
根据所提供的任何限定符(数据库名称或所有者)查找该存储过程。
如果未指定所有者,则使用 dbo 作为所有者查找该存储过程。
因此,虽然当前数据库中可能存在带 sp_ 前缀的用户创建的存储过程,但总会先检查 master 数据库(即使该存储过程已用数据库名称限定)。
重要[/b] 如果用户创建的存储过程与系统存储过程同名,则永远不执行用户创建的存储过程。
分组
如果将一个不同的标识号赋予某过程,则可以用与现有某存储过程相同的名称创建该过程,这样可允许将这些过程进行逻辑分组。同名的分组过程可以同时删除。在同一应用程序中使用的过程一般都以该方式分组。例如,用于 my_app 应用程序的过程可能被命名为 my_proc;1、my_proc;2 等。删除 my_proc 即删除该整个组。将过程分组后,就无法删除该组内的单个过程。
临时存储过程
专用和全局临时存储过程与临时表类似,都可以用向该过程名称添加 # 和 ## 前缀的方法进行创建。# 表示本地临时存储过程,## 表示全局临时存储过程。SQL Server 关闭后,这些过程将不再存在。
临时存储过程在连接到 SQL Server 的早期版本时很有用,这些早期版本不支持再次使用 Transact-SQL 语句或批处理执行计划。连接到 SQL Server 2000 的应用程序应使用 sp_executesql 系统存储过程,而不使用临时存储过程。有关更多信息,请参见执行计划的高速缓存和重新使用。
只有创建本地临时过程的连接才能执行该过程,当该连接关闭(用户从 SQL Server 中注销)时,将自动删除该过程。
任何连接都可执行全局临时存储过程。只有创建该过程的用户所用的连接关闭,并且所有其它连接所用的该过程的当前执行版本运行完毕后,全局临时存储过程才不再存在。一旦用于创建该过程的连接关闭,将不再允许启动执行该全局临时存储过程。只允许那些已启动执行该存储过程的连接完成该过程的运行。
如果直接在 tempdb 数据库中创建没有 # 或 ## 前缀的存储过程,则由于每次启动 SQL Server 时 tempdb 都要重新创建,因此当关闭 SQL Server 时将自动删除该存储过程。直接在 tempdb 中创建的过程即使在创建该过程的连接终止后也会存在。与任何其它对象一样,可向其他用户授予、拒绝和废除执行该临时存储过程的权限。
不能将 CREATE PROCEDURE 语句与其它 SQL 语句组合到单个批处理中。
创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。
存储过程是数据库对象,其名称必须遵守标识符规则。
只能在当前数据库中创建存储过程。
创建存储过程时,应指定:
所有输入参数和向调用过程或批处理返回的输出参数。
执行数据库操作(包括调用其它过程)的编程语句。
返回至调用过程或批处理以表明成功或失败(以及失败原因)的状态值。
系统存储过程
Microsoft® SQL Server™ 2000 中的许多管理活动是通过一种称为系统存储过程的特殊过程执行的。系统存储过程在 master 数据库中创建并存储,带有 sp_ 前缀。可从任何数据库中执行系统存储过程,而无需使用 master 数据库名称来完全限定该存储过程的名称。
强烈建议您不要创建以 sp_ 为前缀的存储过程。SQL Server 始终按照下列顺序查找以 sp_ 开头的存储过程:
在 master 数据库中查找存储过程。
根据所提供的任何限定符(数据库名称或所有者)查找该存储过程。
如果未指定所有者,则使用 dbo 作为所有者查找该存储过程。
因此,虽然当前数据库中可能存在带 sp_ 前缀的用户创建的存储过程,但总会先检查 master 数据库(即使该存储过程已用数据库名称限定)。
重要[/b] 如果用户创建的存储过程与系统存储过程同名,则永远不执行用户创建的存储过程。
分组
如果将一个不同的标识号赋予某过程,则可以用与现有某存储过程相同的名称创建该过程,这样可允许将这些过程进行逻辑分组。同名的分组过程可以同时删除。在同一应用程序中使用的过程一般都以该方式分组。例如,用于 my_app 应用程序的过程可能被命名为 my_proc;1、my_proc;2 等。删除 my_proc 即删除该整个组。将过程分组后,就无法删除该组内的单个过程。
临时存储过程
专用和全局临时存储过程与临时表类似,都可以用向该过程名称添加 # 和 ## 前缀的方法进行创建。# 表示本地临时存储过程,## 表示全局临时存储过程。SQL Server 关闭后,这些过程将不再存在。
临时存储过程在连接到 SQL Server 的早期版本时很有用,这些早期版本不支持再次使用 Transact-SQL 语句或批处理执行计划。连接到 SQL Server 2000 的应用程序应使用 sp_executesql 系统存储过程,而不使用临时存储过程。有关更多信息,请参见执行计划的高速缓存和重新使用。
只有创建本地临时过程的连接才能执行该过程,当该连接关闭(用户从 SQL Server 中注销)时,将自动删除该过程。
任何连接都可执行全局临时存储过程。只有创建该过程的用户所用的连接关闭,并且所有其它连接所用的该过程的当前执行版本运行完毕后,全局临时存储过程才不再存在。一旦用于创建该过程的连接关闭,将不再允许启动执行该全局临时存储过程。只允许那些已启动执行该存储过程的连接完成该过程的运行。
如果直接在 tempdb 数据库中创建没有 # 或 ## 前缀的存储过程,则由于每次启动 SQL Server 时 tempdb 都要重新创建,因此当关闭 SQL Server 时将自动删除该存储过程。直接在 tempdb 中创建的过程即使在创建该过程的连接终止后也会存在。与任何其它对象一样,可向其他用户授予、拒绝和废除执行该临时存储过程的权限。
相关文章推荐
- 存储过程学习三(创建存储过程实例)
- SQL2K数据库开发二十六之存储过程操作创建存储过程(一)
- Oracle 创建存储过程以及PlSql 调用 存储过程
- oracle之存储过程2-创建存储过程
- 创建存储过程和java调用存储过程
- mysql创建 存储过程 并通过java程序调用该存储过程
- 学习SQL SERVER的存储过程----之一认识存储过程语法
- sql server 脚本创建备份数据库的存储过程及利用前述存储过程自动备份数据库的作业
- mysql存储过程学习及java调用存储过程(转载)
- 存储过程 ----- navicat 创建存储过程
- Oracle pl/sql学习 之 子程序 过程和函数 存储过程 存储函数
- mssql 存储过程学习中 [4] 在存储过程中调用另一个存储过程
- 学习SQL SERVER的存储过程-之一认识存储过程语法
- Mysql存储过程学习笔记--建立简单的存储过程
- oracle 创建表并创建存储过程,通过存储过程将其他用户的信息导入到新建表中
- 学习SQL SERVER的存储过程-之一认识存储过程语法
- 存储过程——创建通用存储过程(七)
- 13.0 Mybatis_扩展_存储过程_oracle中创建一个带游标的存储过程
- C#调用存储过程的方法,和简单存储过程创建的方法实例。【转载】为入门的朋友引路,大家互相学习。
- mysql存储过程之创建存储过程