更改先前通過執(zhí)行 CREATE PROCEDURE 語句創(chuàng)建的過程,但不會更改權(quán)限,也不影響相關(guān)的存儲過程或觸發(fā)器。有關(guān) ALTER PROCEDURE 語句所用參數(shù)的更多信息,請參見 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
是要更改的過程的名稱。過程名稱必須符合標識符規(guī)則。
;number
是現(xiàn)有的可選整數(shù),該整數(shù)用來對具有同一名稱的過程進行分組,以便可以用一條 DROP PROCEDURE 語句全部除去它們。
@parameter
過程中的參數(shù)。
data_type
是參數(shù)的數(shù)據(jù)類型。
VARYING
指定作為輸出參數(shù)支持的結(jié)果集(由存儲過程動態(tài)構(gòu)造,內(nèi)容可以變化)。僅適用于游標參數(shù)。
default
參數(shù)的默認值。
OUTPUT
表明參數(shù)是返回參數(shù)。
n
是表示最多可指定 2.100 個參數(shù)的占位符。
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
RECOMPILE 表明 Microsoft® SQL Server™ 不會高速緩存該過程的計劃,該過程將在運行時重新編譯。
ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 ALTER PROCEDURE 語句文本的條目。使用 ENCRYPTION 可防止將過程作為 SQL Server 復制的一部分發(fā)布。
說明 在升級過程中,SQL Server 利用存儲在 syscomments 中的加密注釋來重新創(chuàng)建加密過程。
FOR REPLICATION
指定不能在訂閱服務器上執(zhí)行為復制創(chuàng)建的存儲過程。使用 FOR REPLICATION 選項創(chuàng)建的存儲過程可用作存儲過程篩選,且只能在復制過程中執(zhí)行。本選項不能和 WITH RECOMPILE 選項一起使用。
AS
過程將要執(zhí)行的操作。
sql_statement
過程中要包含的任意數(shù)目和類型的 Transact-SQL 語句。但有一些限制。有關(guān)更多信息,請參見 CREATE PROCEDURE 中的"sql_statement 限制"。
n
是表示該過程中可以包含多條 Transact-SQL 語句的占位符。有關(guān)更多信息,請參見 CREATE PROCEDURE。
有關(guān) ALTER PROCEDURE的更多信息,參閱 CREATE PROCEDURE 中的注釋。
說明 如果原來的過程定義是用 WITH ENCRYPTION 或 WITH RECOMPILE 創(chuàng)建的,那么只有在 ALTER PROCEDURE 中也包含這些選項時,這些選項才有效。
ALTER PROCEDURE 權(quán)限默認授予 sysadmin 固定服務器角色成員、db_owner 和 db_ddladmin 固定數(shù)據(jù)庫角色成員和過程的所有者且不可轉(zhuǎn)讓。
用 ALTER PROCEDURE 更改的過程的權(quán)限和啟動屬性保持不變。
下例創(chuàng)建稱為 Oakland_authors 的過程,默認情況下,該過程包含所有來自加利福尼亞州奧克蘭市的作者。隨后授予了權(quán)限。然后,當該過程需更改為能夠檢索所有來自加利福尼亞州的作者時,用 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
相關(guān)文章