ALTER PROCEDURE 更改先前通过执行 CREATE PROCEDURE 语句创建的过程但不会更改权限也不影响相关的存储过程或触发器有关 ALTER PROCEDURE 语句所用参数的更多信息请参见 CREATE 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 ] 参数 procedure_name 是要更改的过程的名称过程名称必须符合标识符规则 ;number 是现有的可选整数该整数用来对具有同一名称的过程进行分组以便可以用一条 DROP PROCEDURE 语句全部除去它们 @parameter 过程中的参数 data_type 是参数的数据类型 VARYING 指定作为输出参数支持的结果集(由存储过程动态构造内容可以变化)仅适用于游标参数 default 参数的默认值 OUTPUT 表明参数是返回参数 n 是表示最多可指定 个参数的占位符 {RECOMPILE | ENCRYPTION | RECOMPILE ENCRYPTION} RECOMPILE 表明 Microsoft® SQL Server; 不会高速缓存该过程的计划该过程将在运行时重新编译 ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 ALTER PROCEDURE 语句文本的条目使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布 说明 在升级过程中SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程 FOR REPLICATION 指定不能在订阅服务器上执行为复制创建的存储过程使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选且只能在复制过程中执行本选项不能和 WITH RECOMPILE 选项一起使用 AS 过程将要执行的操作 sql_statement 过程中要包含的任意数目和类型的 TransactSQL 语句但有一些限制有关更多信息请参见 CREATE PROCEDURE 中的sql_statement 限制 n 是表示该过程中可以包含多条 TransactSQL 语句的占位符有关更多信息请参见 CREATE PROCEDURE 注释 有关 ALTER PROCEDURE的更多信息参阅 CREATE PROCEDURE 中的注释 说明 如果原来的过程定义是用 WITH ENCRYPTION 或 WITH RECOMPILE 创建的那么只有在 ALTER PROCEDURE 中也包含这些选项时这些选项才有效 权限 ALTER PROCEDURE 权限默认授予 sysadmin 固定服务器角色成员db_owner 和 db_ddladmin 固定数据库角色成员和过程的所有者且不可转让 用 ALTER PROCEDURE 更改的过程的权限和启动属性保持不变 示例 下例创建称为 Oakland_authors 的过程默认情况下该过程包含所有来自加利福尼亚州奥克兰市的作者随后授予了权限然后当该过程需更改为能够检索所有来自加利福尼亚州的作者时用 ALTER PROCEDURE 重新定义了该存储过程 USE pubs GO IF EXISTS(SELECT name FROM sysobjects WHERE name = Oakland_authors AND type = P) DROP PROCEDURE Oakland_authors GO Create a procedure from the authors table that contains author information for those authors who live in Oakland California USE pubs GO CREATE PROCEDURE Oakland_authors AS SELECT au_fname au_lname address city zip FROM pubsauthors WHERE city = Oakland and state = CA ORDER BY au_lname au_fname GO Here is the statement to actually see the text of the procedure SELECT oid ctext FROM sysobjects o INNER JOIN syscomments c ON oid = cid WHERE otype = P and oname = Oakland_authors Here EXECUTE permissions are granted on the procedure to public GRANT EXECUTE ON Oakland_authors TO public GO The procedure must be changed to include all authors from California regardless of what city they live in If ALTER PROCEDURE is not used but the procedure is dropped and then recreated the above GRANT statement and any other statements dealing with permissions that pertain to this procedure must be reentered ALTER PROCEDURE Oakland_authors WITH ENCRYPTION AS SELECT au_fname au_lname address city zip FROM pubsauthors WHERE state = CA ORDER BY au_lname au_fname GO Here is the statement to actually see the text of the procedure SELECT oid ctext FROM sysobjects o INNER JOIN syscomments c ON oid = cid WHERE otype = P and oname = Oakland_authors GO |