3.8.2 创建存储过程
SQL Server提供了两种方式创建存储过程,一种是通过SQL Server Management Studio,另一种方法是使用CREATE PROCEDURE创建存储过程。
(1)使用SQL Server Management Studio创建存储过程
启动SQL Server Management Studio。
在左边的“对象资源管理器”窗口中展开要创建存储过程的“数据库”“可编程性”节点,右击“存储过程”项,在出现的快捷菜单中选择“新建存储过程”命令,如图3-32所示。
图3-32 “新建存储过程”命令
此时,在“对象资源管理器”右边的窗口中出现了CREATE PROCEDURE语句的框架,可以修改要创建的存储过程的名称,然后加入实现存储过程功能的SQL语句,如图3-33所示。
在模板中输入完成后,单击工具栏上的
按钮,进行语法分析。有语法错误时,根据提示修改语法错误;没有语法错误时,单击工具栏上的
按钮,可以立即执行SQL语句,以创建存储过程。
图3-33 新建存储过程
此时用户在“对象资源管理器”中刷新数据库,就可以看到刚才创建的存储过程。用户也可以单击工具栏上的保存按钮,保存创建存储过程的SQL语句。
(2)使用CREATE PROCEDURE语句创建存储过程
其基本格式如下:
说明:
procedure_name:新建存储过程的名称,必须符合标识符规则且在架构中必须唯一。命名时应避免使用“sp_”开头。
@parameter:存储过程的参数。通过将“@”用作第一个字符来指定参数名称,参数名称须符合标识符规则。可有多个参数,多个参数间用逗号隔开。用户必须在调用过程时为每个声明的参数提供值(除非定义了该参数的默认值)。
data_type:参数的数据类型。注意,如果指定参数类型为游标数据类型,则还必须指定VARYING和OUTPUT关键字。
VARYING:指定作为输出参数支持的结果集,仅适用于游标参数。
default:参数的默认值。如果为参数定义了默认值,则无须指定此参数的值即可执行过程。默认值必须是常量或NULL。
OUT|OUTPUT:指示参数是输出参数。使用OUTPUT参数将值返回给过程的调用方。
READONLY:指示不能在过程的主体中更新或修改参数。如果参数类型为表值类型,则必须指定READONLY。
RECOMPILE:指示数据库引擎不缓存此过程的查询计划,将会强制在每次执行过程时都对该过程进行编译。
ENCRYPTION:指示系统将CREATE PROCEDURE语句的原始文本转换为加密格式。加密代码的输出在SQL Server的任何目录视图中都不能直接显示,即使使用系统存储过程SP_HELPTEXT也无法看到存储过程的定义语句。
FOR REPLICATION:指定为复制创建该过程。
AS:指定过程要执行的操作。
{[BEGIN]sql_statement[;][...n][END]}:组成过程主体的一个或多个Transact-SQL语句,可以使用可选的BEGIN和END将这些语句括起来。
【例3.105】 创建不带参数的存储过程P1,用于从学生表Student中查询所有男同学的信息。
【例3.106】 创建带输入参数的存储过程P2,用于查询某学院的所有学生信息,学院名称作为参数传递,如未指定学院名称,则参数取默认值“计算机”。
【例3.107】 创建带输出参数的存储过程P3,用于从学生表Student中根据学号查询该学生的姓名和院系,学号作为参数传递,查询的结果由输出参数@Sname和@Sdept返回。
根据上述例子可以看到,创建存储过程时,需要确定存储过程的4个组成部分:
存储过程的名称。
存储过程的输入参数。
存储过程执行后传给调用者的输出参数。
存储过程功能语句,即针对数据库的操作语句,包括调用其他存储过程的语句。