Transact-SQL 参考

ALTER FUNCTION

更改先前由CREATE FUNCTION 语句创建的现有用户定义函数,但不会更改权限,也不影响相关的函数、存储过程或触发器。

有关 ALTER FUNCTION 语句所用参数的更多信息,请参见 CREATE FUNCTION

语法

标量函数

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

内嵌表值函数

ALTER FUNCTION [ owner_name. ] function_name
    ( [ { @parameter_name scalar_parameter_data_type [ = default ] } [ ,...n ] ] )

RETURNS TABLE

[ WITH < function_option > [ ,...n ] ]

[ AS ]

RETURN [ ( ] select-stmt [ ) ]

多语句表值函数

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

拥有待更改的用户定义函数的用户 ID 名。owner_name 必须是现有用户 ID。

function_name

是要更改的用户定义函数。函数名称必须符合标识符的规则,对其所有者来说,该名称在数据库中必须是唯一的。

@parameter_name

用户定义函数的参数。可声明一个或多个参数。函数最多可以有 1,024 个参数。用户必须在执行函数时提供每个所声明参数的值(除非定义了该参数的默认值)。当该函数的参数有默认值时,在调用该函数时必须指定"default"关键字才能获得默认值。此行为不同于在存储过程中有默认值的参数,在存储过程中省略参数也意味着使用默认值。

使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个函数的参数仅用于该函数本身;相同的参数名称可以用在其它函数中。参数只能代替常量;而不能用于代替表名、列名或其它数据库对象的名称。

scalar_parameter_data_type

参数的数据类型。所有标量数据类型(包括 bigintsql_variant)都可用作用户定义函数的参数。不支持 timestamp 数据类型。不能指定非标量类型(例如 cursor table)。

scalar_return_data_type

是标量用户定义函数的返回值。scalar_return_data_type 可以是 SQL Server 支持的任何标量数据类型(textntextimage timestamp 除外)。

scalar_expression

指定标量函数返回标量值。

TABLE

指定表值函数的返回值为表。

在内嵌表值函数中,通过单个 SELECT 语句定义 TABLE 返回值。内嵌函数没有相关联的返回变量。

在多语句表值函数中,@return_variable 是 TABLE 变量,用于存储和累积应作为函数值返回的行。

function_body

指定一组 Transact-SQL 语句定义函数的值,这些语句合在一起不会产生副作用。function_body 只用于标量函数和多语句表值函数。

在标量函数中,function_body 是一系列合起来求得标量值的 Transact-SQL 语句。

在多语句表值函数中,function_body 是一系列填充表返回变量的 Transact-SQL 语句。

select-stmt

是定义内嵌表值函数返回值的单个 SELECT 语句。

ENCRYPTION

指出 SQL Server 加密包含 CREATE FUNCTION 语句文本的系统表列。使用 ENCRYPTION 可以避免将函数作为 SQL Server 复制的一部分发布。

SCHEMABINDING

指定将函数绑定到它所引用的数据库对象。如果其它架构绑定对象引用该函数,此条件将防止更改该函数。

函数与其所引用对象的绑定关系只有在发生以下两种情况之一时才被解除:

有关函数绑定到架构所必须满足的条件列表,请参见 CREATE FUNCTION

注释

不能用 ALTER FUNCTION 将标量值函数更改为表值函数,反之亦然。同样地,也不能用 ALTER FUNCTION 将行内函数更改为多语句函数,反之亦然。

权限

ALTER FUNCTION 权限默认授予 sysadmin 固定服务器角色成员、db_ownerdb_ddladmin 固定数据库角色成员和函数的所有者且不可转让。

函数的所有者对其函数具有 EXECUTE 权限。不过,也可将此权限授予其他用户。

请参见

CREATE FUNCTION

DROP FUNCTION