更改先前由CREATE FUNCTION 語句創(chuàng)建的現(xiàn)有用戶定義函數(shù),但不會更改權(quán)限,也不影響相關(guān)的函數(shù)、存儲過程或觸發(fā)器。
有關(guān) ALTER FUNCTION 語句所用參數(shù)的更多信息,請參見 CREATE FUNCTION。
標(biāo)量函數(shù)
ALTER FUNCTION [ owner_name. ] function_name
( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option> [,...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
內(nèi)嵌表值函數(shù)
ALTER FUNCTION [ owner_name. ] function_name
( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS TABLE
[ WITH < function_option > [ ,...n ] ]
[ AS ]
RETURN [ ( ] select-stmt [ ) ]
多語句表值函數(shù)
ALTER FUNCTION [ owner_name. ] function_name
( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS @return_variable TABLE < table_type_definition >
[ WITH < function_option > [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
< function_option > ::=
{ ENCRYPTION | SCHEMABINDING }
< table_type_definition > ::=
}
( { column_definition | table_constraint [ ,...n ] )
owner_name
擁有待更改的用戶定義函數(shù)的用戶 ID 名。owner_name 必須是現(xiàn)有用戶 ID。
function_name
是要更改的用戶定義函數(shù)。函數(shù)名稱必須符合標(biāo)識符的規(guī)則,對其所有者來說,該名稱在數(shù)據(jù)庫中必須是唯一的。
@parameter_name
用戶定義函數(shù)的參數(shù)??陕暶饕粋€或多個參數(shù)。函數(shù)最多可以有 1,024 個參數(shù)。用戶必須在執(zhí)行函數(shù)時提供每個所聲明參數(shù)的值(除非定義了該參數(shù)的默認(rèn)值)。當(dāng)該函數(shù)的參數(shù)有默認(rèn)值時,在調(diào)用該函數(shù)時必須指定"default"關(guān)鍵字才能獲得默認(rèn)值。此行為不同于在存儲過程中有默認(rèn)值的參數(shù),在存儲過程中省略參數(shù)也意味著使用默認(rèn)值。
使用 @ 符號作為第一個字符來指定參數(shù)名稱。參數(shù)名稱必須符合標(biāo)識符的規(guī)則。每個函數(shù)的參數(shù)僅用于該函數(shù)本身;相同的參數(shù)名稱可以用在其它函數(shù)中。參數(shù)只能代替常量;而不能用于代替表名、列名或其它數(shù)據(jù)庫對象的名稱。
scalar_parameter_data_type
參數(shù)的數(shù)據(jù)類型。所有標(biāo)量數(shù)據(jù)類型(包括 bigint 和 sql_variant)都可用作用戶定義函數(shù)的參數(shù)。不支持 timestamp 數(shù)據(jù)類型。不能指定非標(biāo)量類型(例如 cursor 和 table)。
scalar_return_data_type
是標(biāo)量用戶定義函數(shù)的返回值。scalar_return_data_type 可以是 SQL Server 支持的任何標(biāo)量數(shù)據(jù)類型(text、ntext、image 和 timestamp 除外)。
scalar_expression
指定標(biāo)量函數(shù)返回標(biāo)量值。
TABLE
指定表值函數(shù)的返回值為表。
在內(nèi)嵌表值函數(shù)中,通過單個 SELECT 語句定義 TABLE 返回值。內(nèi)嵌函數(shù)沒有相關(guān)聯(lián)的返回變量。
在多語句表值函數(shù)中,@return_variable 是 TABLE 變量,用于存儲和累積應(yīng)作為函數(shù)值返回的行。
function_body
指定一組 Transact-SQL 語句定義函數(shù)的值,這些語句合在一起不會產(chǎn)生副作用。function_body 只用于標(biāo)量函數(shù)和多語句表值函數(shù)。
在標(biāo)量函數(shù)中,function_body 是一系列合起來求得標(biāo)量值的 Transact-SQL 語句。
在多語句表值函數(shù)中,function_body 是一系列填充表返回變量的 Transact-SQL 語句。
select-stmt
是定義內(nèi)嵌表值函數(shù)返回值的單個 SELECT 語句。
ENCRYPTION
指出 SQL Server 加密包含 CREATE FUNCTION 語句文本的系統(tǒng)表列。使用 ENCRYPTION 可以避免將函數(shù)作為 SQL Server 復(fù)制的一部分發(fā)布。
SCHEMABINDING
指定將函數(shù)綁定到它所引用的數(shù)據(jù)庫對象。如果其它架構(gòu)綁定對象引用該函數(shù),此條件將防止更改該函數(shù)。
函數(shù)與其所引用對象的綁定關(guān)系只有在發(fā)生以下兩種情況之一時才被解除:
有關(guān)函數(shù)綁定到架構(gòu)所必須滿足的條件列表,請參見 CREATE FUNCTION。
不能用 ALTER FUNCTION 將標(biāo)量值函數(shù)更改為表值函數(shù),反之亦然。同樣地,也不能用 ALTER FUNCTION 將行內(nèi)函數(shù)更改為多語句函數(shù),反之亦然。
ALTER FUNCTION 權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色成員、db_owner 和 db_ddladmin 固定數(shù)據(jù)庫角色成員和函數(shù)的所有者且不可轉(zhuǎn)讓。
函數(shù)的所有者對其函數(shù)具有 EXECUTE 權(quán)限。不過,也可將此權(quán)限授予其他用戶。
相關(guān)文章