1.执行存储过程
要运行某个存储过程,只要简单地通过名字就可以引用它。如果对存储过程的调用不是批处理中的第一条语句,则需要使用EXECUTE关键字。下面是执行存储过程的语法格式。
[[EXEC[UTE]]]
{[@return_status=]
procedure_name[;number]|@procedure_name_var}
[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]]
[,...n]
[WITH RECOMPILE]
各选项的含义如下:
(1)@return_status:一个可选的整型变量,保存存储过程的返回状态。这个变量在EXECUTE语句使用前,必须已声明。
(2)@procedure_name_var:一个局部变量名,用来代表存储过程的名称。
(3)@patameter:过程参数,在CREATE PROCEDURE语句中定义。
(4)value:过程中参数的值。如果参数名称没有指定,参数值必须以CREATE PROCEDURE语句中定义的顺序给出。
其他数据和保留字的含义与CREATE PROCEDURE中价绍的一样。
例如,执行上例的存储过程goods_info。在SQL查询分析其中输入如下命令。EXEC goods_info
运行结果如下图所示:
goods_name | clasification_name | unit_price | |
1 | IBM R51 | 笔记本计算机 | 9999.00 |
2 | 旭日160-D1.7G | 笔记本计算机 | 9499.00 |
2.修改存储过程
修改存储过程可以通过SQL Server管理平台和Transact-SQL语句实现。
1)使用SQL Server管理平台修改存储过程
修改存储过程的操作步骤如下:
(1)打开SQL Server管理平台,展开结点“对象资源管理器”→“数据库服务器”→“可编程性”→“存储过程”,选择要修改的存储过程,并右击,在弹出的快捷菜单中选择“修改”命令。
(2)此时在右边的编译器窗口中出现存储过程的源代码(将CREATE PROCEDURE 改为ALTER PROCEDURE),可以直接进行修改。修改完后单击工具栏中的“执行”按钮该存储过程,从而达到目的。
2)使用ALTER PROCEDUR语句修改存储过程
修改用CREATE PROCEDURE语句创建的存储过程,并且不改变权限的授予情况,不影响任何其他独立的存储过程或触发器,常使用ALTER PROCEDURE 语句。其语法规则如下:
ALTER PROC[EDURE] procedure_name[,number]
[{@parameter data_type}
[VARYING][=default][OUTPUT]][,...n]
[WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement[,...n]
其中的参数和保留字的含义与CREATE PROCEDURE语句中的相似。
举例:使用ALTER PROCEDURE 语句更改存储过程。
①创建存储过程employee_dep,以获取总经理办的男员工。
CREATE PROCEDURE employee_dep AS
SELECT employee_name,sex,address,department_name
FROM employee e INNER JOIN department d
ON e.department_id=d.department_id
WHERE sex='男'AND e.department_id='D001'
GO
执行存储过程employee_dep,结果如下
employee_name | sex | address | department_name | |
1 | 钱大理 | 男 | 东风路79号 | 销售部 |
2 | 东方牧 | 男 | 五一北路24号 | 销售部 |
②用SELECT语句查询系统表sysobjects和syscomments,查看employee-dep存储过程的文本信息的代码如下:
SELECT o.id,c.text
FROM sysobjects o INNER JOIN syscomments c ON o.id=c.id
WHERE o.type='P' AND o.name='employee_dep'
GO
③使用ALTER PROCEDURE 语句对employee_dep过程进行修改,使其能够显示出所有男员工,并使employee_dep过程以加密方式存储在表syscomments中,其代码如下:
ALTER PROCEDURE employee_dep
WITH ENCRYPTION
SELECT employee_name,sex,address,department_name
FROM employee e INNER JOIN department d
ON e.department_id=d.department_id
WHERE sex='男'
GO
执行修改后的存储过程employee_dep,结果如下表所示。
employee_name | sex | address | department_name | |
1 | 钱大理 | 男 | 东风路29号 | 销售部 |
2 | 郭文斌 | 男 | 五一北路25号 | 市场部 |
这是由于在ALTER PROCEDURE 语句中使用WITH ENCRYPTION 关键字对存储过程employee_dep文本进行了加密,其文本信息显示为NULL。
也可以使用系统存储过程sp_helptext显示存储过程的定义(存储在syscomments系统表内),其命令如下:sp_helptext employee_dep
结果为“对象‘employee_dep’的文本已加密“。
id | text | |
1 | 837578022 | NULL |