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