当不再使用一个用户存储过程时,可以把它从数据库中删除。
通过企业管理器或在查询分析器中执行Transact-SQL语言的DROP PROCEDURE命令可以删除用户创建的存储过程。此外,用户存储过程也可以重新命名。
一、修改存储过程定义
使用企业管理器修改存储过程
使用企业管理器可以很方便地修改存储过程定义。双击该存储过程,在“存储过程属性”对话框中,在文本框内修改定义存储过程的Transact-SQL语句,修改后也可以进行语法检查。单击“确定”按钮就完成了修改存储过程。
二、修改存储过程
使用ALTER PROCEDURE语句修改存储过程
语法格式:
ALTER PROC[EDURE]存储过程名[;下标]
[{@形参 数据类型}
[VARYING][=默认值][OUTPUT] ][,...n1]
[WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ]
AS Transact-SQL 语句 [...n2] /*执行的操作*/
各参数含义与CREATE PROCEDURE命令相同。
两种方法的区别
从形式看,该语句与CREATE PROCDURE语句的主要差别仅在开头的关键字不同(一为CREATE,另一为ALTER),但ALTER PROCEDURE语句不会更改权限和启动属性,即如果我们先删除某存储过程,再用CREATE PROCDURE语句创建与它同名的存储过程,虽然两者的语句一致,但原先该存储过程的权限以及启动属性将不复存在。
而用ALTER PROCEDURE更改存储过程后,该过程的权限和启动属性保持不变。另外,如果原来的过程定义是用 WITH ENCRYPTION 或 WITH RECOMPILE 创建的,那么只有在 ALTER PROCEDURE 中也包含这些选项时,这些选项才有效。
[例1] 对存储过程student_info1进行修改,重新计算学分。
程序清单:
USE teachdb
GO
ALTER PROCEDURE student_info1
@name char(8),@cname char(16)
AS
SELECT student.s_no AS学号,student.s_name AS姓名,course.c_name AS课程名,choice.score AS 成绩,course.c_score*choice.score/100 AS 获得学分
FROM student,choice,course
WHERE student.s_name=@name and course.c_name=@cname
and student.s_no=choice.s_no and course.c_no=choice.c_no
GO
EXEC student_info1 '袁敏', 'C语言'
通过查询分析器运行以上程序,结果如下图所示。

[例2]创建名为select_students的存储过程,该过程可查询所有学生信息。当需要改为能检索计算机专业的学生信息时,用ALTER PROCEDURE重新定义该存储过程。
程序清单:
USE teachdb
GO
IF EXISTS(SELECT name FROM sysobjects WHERE name='select_students' AND type='P')
DROP PROCEDURE select_students /*若该存储过程已存在,则先删除*/
GO
/*创建存储过程*/
CREATE PROCEDURE select_students
AS
SELECT * FROM student
ORDER BY student.s_no
GO
EXEC select_students
GO
/*修改存储过程select_students*/
ALTER PROCEDURE select_students
WITH ENCRYPTION
AS
SELECT * FROM student
WHERE s_department='计算机'
ORDER BY student.s_no
GO
EXEC select_students
通过查询分析器运行以上程序,结果如下图所示。
![]()
三、重新命名用户存储过程
用户存储过程可以更改名字,方法有以下两种:
使用企业管理器修改存储过程名称。
在企业管理器中,右击要操作的存储过程名称,从弹出的快捷菜单中选择“重命名”选项,即可修改存储过程名称。
使用系统存储过程修改存储过程名。
修改存储过程名称也可以使用系统存储过程sp_rename。
语法形式:
sp_rename <原存储过程名称>,<新存储过程名称>
[例3] 将student_info1存储过程名称修改为student_information。
USE teachdb
GO
sp_rename student_info1,student_information
四、删除用户存储过程
当不再需要使用一个存储过程时,可以把它从数据库中删除。方法有以下两种:
使用企业管理器删除存储过程
在企业管理器中选择对应数据库中要删除的存储过程,然后单击工具栏中的 按钮,或者单击鼠标右键,在弹出的快捷菜单中选择【删除(D)】选项,此时弹出“除去对象”对话框。单击【全部除去】按钮,即完成存储过程的删除。
使用DROP PROCEDURE语句删除用户存储过程
语法格式:
DROP PROCEDURE 存储过程名称 [,…n]
功能:
从当前数据库中删除一个或多个存储过程或存储过程组。如果要删除多个存储过程,各存储过程名间用逗号分隔。
[例4]删除teachdb数据库中的student_info2存储过程。
USE teachdb
GO
DROP PROCEDURE student_info2
若要查看存储过程名列表(存储在sysobjects系统表内),可使用sp_help系统存储过程。若要显示未加密的存储过程定义文本(存储在syscomments系统表内),可使用sp_helptext系统存储过程。删除某个存储过程时,将从 sysobjects 和 syscomments 系统表中删除有关该存储过程的信息。
