Transact-SQL 参考

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

是表示最多可指定 2.100 个参数的占位符。

{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

过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。有关更多信息,请参见 CREATE PROCEDURE 中的"sql_statement 限制"。

n

是表示该过程中可以包含多条 Transact-SQL 语句的占位符。有关更多信息,请参见 CREATE PROCEDURE。

注释

有关 ALTER PROCEDURE的更多信息,参阅 CREATE PROCEDURE 中的注释。

说明  如果原来的过程定义是用 WITH ENCRYPTION 或 WITH RECOMPILE 创建的,那么只有在 ALTER PROCEDURE 中也包含这些选项时,这些选项才有效。

权限

ALTER PROCEDURE 权限默认授予 sysadmin 固定服务器角色成员、db_ownerdb_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 pubs..authors
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 o.id, c.text
FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id
WHERE o.type = 'P' and o.name = '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 re-created, the above GRANT statement and any 
-- other statements dealing with permissions that pertain to this 
-- procedure must be re-entered.
ALTER PROCEDURE Oakland_authors
WITH ENCRYPTION
AS 
SELECT au_fname, au_lname, address, city, zip
FROM pubs..authors
WHERE state = 'CA'
ORDER BY au_lname, au_fname
GO
-- Here is the statement to actually see the text of the procedure.
SELECT o.id, c.text
FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id
WHERE o.type = 'P' and o.name = 'Oakland_authors'
GO

请参见

数据类型

DROP PROCEDURE

EXECUTE

设计存储过程

系统表

使用标识符