执行与修改存储过程

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_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



猜你喜欢

转载自blog.csdn.net/geyulei/article/details/80774923
今日推荐