Поделиться через


ALTER FUNCTION (Transact-SQL)

Область применения:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureАналитика Azure SynapseПлатформа аналитики (PDW)Конечная точка аналитики SQL в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

Изменяет существующую функцию Transact-SQL или CLR, созданную ранее путем выполнения инструкции, не изменяя разрешения и не затрагивая CREATE FUNCTION зависимые функции, хранимые процедуры или триггеры.

Подсказка

Можно указать CREATE OR ALTER FUNCTION , чтобы создать новую функцию, если она не существует по имени, или изменить существующую функцию в одной инструкции.

Соглашения о синтаксисе Transact-SQL

Синтаксис

-- Transact-SQL Scalar Function Syntax    
ALTER FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type   
    [ = default ] }   
    [ ,...n ]  
  ]  
)  
RETURNS return_data_type  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    BEGIN   
        function_body   
        RETURN scalar_expression  
    END  
[ ; ]
-- Transact-SQL Inline Table-Valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type   
    [ = default ] }   
    [ ,...n ]  
  ]  
)  
RETURNS TABLE  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    RETURN [ ( ] select_stmt [ ) ]  
[ ; ]  
-- Transact-SQL Multistatement Table-valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type   
    [ = default ] }   
    [ ,...n ]  
  ]  
)  
RETURNS @return_variable TABLE <table_type_definition>  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    BEGIN   
        function_body   
        RETURN  
    END  
[ ; ]  
-- Transact-SQL Function Clauses   
<function_option>::=   
{  
    [ ENCRYPTION ]  
  | [ SCHEMABINDING ]  
  | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]  
  | [ EXECUTE_AS_Clause ]  
} 

<table_type_definition>:: =   
( { <column_definition> <column_constraint>   
  | <computed_column_definition> }   
    [ <table_constraint> ] [ ,...n ]  
)   
<column_definition>::=  
{  
    { column_name data_type }  
    [ [ DEFAULT constant_expression ]   
      [ COLLATE collation_name ] | [ ROWGUIDCOL ]  
    ]  
    | [ IDENTITY [ (seed , increment ) ] ]  
    [ <column_constraint> [ ...n ] ]   
}  

<column_constraint>::=   
{  
    [ NULL | NOT NULL ]   
    { PRIMARY KEY | UNIQUE }  
      [ CLUSTERED | NONCLUSTERED ]   
        [ WITH FILLFACTOR = fillfactor   
        | WITH ( < index_option > [ , ...n ] )  
      [ ON { filegroup | "default" } ]  
  | [ CHECK ( logical_expression ) ] [ ,...n ]  
}  

<computed_column_definition>::=  
column_name AS computed_column_expression   

<table_constraint>::=  
{   
    { PRIMARY KEY | UNIQUE }  
      [ CLUSTERED | NONCLUSTERED ]   
      ( column_name [ ASC | DESC ] [ ,...n ] )  
        [ WITH FILLFACTOR = fillfactor   
        | WITH ( <index_option> [ , ...n ] )  
  | [ CHECK ( logical_expression ) ] [ ,...n ]  
}  

<index_option>::=  
{   
    PAD_INDEX = { ON | OFF }   
  | FILLFACTOR = fillfactor   
  | IGNORE_DUP_KEY = { ON | OFF }  
  | STATISTICS_NORECOMPUTE = { ON | OFF }   
  | ALLOW_ROW_LOCKS = { ON | OFF }  
  | ALLOW_PAGE_LOCKS ={ ON | OFF }   
}  
-- CLR Scalar and Table-Valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name   
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type   
    [ = default ] }   
    [ ,...n ]  
)  
RETURNS { return_data_type | TABLE <clr_table_type_definition> }  
    [ WITH <clr_function_option> [ ,...n ] ]  
    [ AS ] EXTERNAL NAME <method_specifier>  
[ ; ]  
-- CLR Function Clauses
<method_specifier>::=  
    assembly_name.class_name.method_name  

<clr_function_option>::=  
}  
    [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]  
  | [ EXECUTE_AS_Clause ]  
}  

<clr_table_type_definition>::=   
( { column_name data_type } [ ,...n ] )  
-- Syntax for In-Memory OLTP: Natively compiled, scalar user-defined function  
ALTER FUNCTION [ schema_name. ] function_name    
 ( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type   
    [ NULL | NOT NULL ] [ = default ] }   
    [ ,...n ]   
  ]   
)   
RETURNS return_data_type  
    [ WITH <function_option> [ ,...n ] ]   
    [ AS ]   
    BEGIN ATOMIC WITH (set_option [ ,... n ])  
        function_body   
        RETURN scalar_expression  
    END  

<function_option>::=   
{ |  NATIVE_COMPILATION   
  |  SCHEMABINDING   
  | [ EXECUTE_AS_Clause ]   
  | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]   
}  

Аргументы

schema_name

Имя схемы, к которой принадлежит определяемая пользователем функция.

function_name

Определяемая пользователем функция, должна быть изменена.

Примечание.

Даже при отсутствии аргументов скобки после имени функции обязательны.

@ parameter_name

Параметр в пользовательской функции. Может быть объявлен один или несколько аргументов.

Для функций допускается не более 2 100 параметров. При выполнении функции значение каждого из объявленных параметров должно быть указано пользователем, если для них не определены значения по умолчанию.

Определяет имя параметра, используя знак @ как первый символ. Имя параметра должно соответствовать правилам для идентификаторов. Параметры являются локальными в пределах функции, в разных функциях могут быть использованы одинаковые имена параметров. Аргументы могут использоваться только вместо констант. Они не могут использоваться вместо имен таблиц, имен столбцов или имен других объектов базы данных.

Примечание.

Значение ANSI_WARNINGS игнорируется при передаче аргументов хранимой процедуре или пользовательской функции, а также при объявлении и настройке переменных в инструкции пакетных заданий. Например, если объявить переменную как char(3), а затем присвоить ей значение длиннее трех символов, данные будут усечены до размера переменной, а инструкция INSERT или UPDATE завершится без ошибок.

[ type_schema_name. ] parameter_data_type

Тип данных аргумента, а также схема, к которой он принадлежит. Для функций Transact-SQL допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типа данных timestamp. Для функций CLR допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типов данных text, ntext, image и timestamp. Нескалярные типы cursor и table не могут быть указаны в качестве типов данных параметров ни для функций Transact-SQL, ни для функций CLR.

Если type_schema_name не указан, ядро СУБД SQL Server выполняет поиск parameter_data_type в следующем порядке:

  • Схема, содержащая имена системных типов данных SQL Server.

  • в установленной по умолчанию для текущего пользователя схеме в текущей базе данных;

  • Схема dbo в текущей базе данных.

[ = по умолчанию ] **

Значение параметра по умолчанию. Если определено значение default, то функция выполняется даже в том случае, если для данного параметра значение не указано.

Примечание.

Для функций CLR также могут указываться значения параметров по умолчанию, кроме типов данных varchar(max) и varbinary(max).

Если аргумент функции имеет определенное по умолчанию значение, то ключевое слово DEFAULT должно быть задано при вызове функции для получения значения по умолчанию. Применение ключевого слова DEFAULT следует отличать от использования аргументов со значениями по умолчанию в хранимых процедурах, когда не указанный аргумент неявно принимает значение по умолчанию.

return_data_type

Возвращаемое значение скалярной функции, определяемой пользователем. Для функций Transact-SQL допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типа данных timestamp. Для функций CLR допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типов данных text, ntext, image и timestamp. Нескалярные типы cursor и table не могут быть указаны в качестве возвращаемых типов данных ни для функций Transact-SQL, ни для функций CLR.

function_body

Указывает, что серия инструкций Transact-SQL, совместное выполнение которых не вызывает побочных эффектов, например изменения содержимого таблиц, определяет значение функции. function_body используется только в скалярных функциях и функциях с табличным значением из нескольких инструкций.

Для скалярных функций function_body представляет собой ряд инструкций Transact-SQL, совместное выполнение которых вычисляет скалярное выражение.

Для функций с табличным значением из нескольких операторов function_body является рядом операторов Transact-SQL, заполняющих возвращаемую переменную TABLE.

scalar_expression

Указывает на то, что скалярная функция возвращает скалярное значение.

ТАБЛИЦА

Указывает, что возвращаемым значением функции с табличным значением, является таблица. Функциям с табличным значением могут передаваться только константы и @local_variables.

Во встроенных функциях с табличным значением возвращаемое значение TABLE определяется при использовании единственной инструкции SELECT. Встроенные функции не имеют соответствующих возвращаемых переменных.

В функциях с табличным значением из нескольких инструкций переменная @return_variable — это переменная TABLE, используемая для сохранения данных и накопления строк, которые возвращаются в качестве значения функции. @Аргумент return_variable может быть указан только для функций Transact-SQL, но не для функций CLR.

select-stmt

Одна инструкция SELECT, определяющая возвращаемое значение встроенной табличной функции.

EXTERNAL NAME <method_specifierassembly_name.class>_name.method_name

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

Указывает метод сборки, привязываемый к функции. assembly_name должен соответствовать существующей сборке в SQL Server в текущей видимой базе данных. class_name должен быть допустимым идентификатором SQL Server и должен существовать в сборке как класс. Если класс имеет квалифицированное имя пространства имен, которое использует точку (.) для разделения частей пространства имен, имя класса разделено скобками ([]) или кавычками (""). method_name должно быть допустимым идентификатором SQL Server и существовать как статический метод в указанном классе.

Примечание.

По умолчанию SQL Server не может выполнять код CLR. Можно создавать, изменять и удалять объекты базы данных, ссылающиеся на модули среды CLR; Однако эти ссылки нельзя выполнить в SQL Server, пока не включите параметр clr. Для включения параметра используйте хранимую процедуру sp_configure.

Примечание.

Этот параметр недоступен в автономной базе данных.

< > table_type_definition( { <column_definition><column_constraint> | <> computed_column_definition } [ <table_constraint ] [ ,...>n ] )

Определяет тип данных таблицы для функции Transact-SQL. Объявление таблицы включает определения столбцов, а также ограничений для столбцов и таблиц.

< > clr_table_type_definition ( { column_namedata_type } [ ,...n ] )

Область применения: SQL Server 2008 (10.0.x) и более поздних версий — база данных SQL (предварительная версия в некоторых регионах).

Определяет табличные типы данных для функции CLR. Объявление таблицы включает только имена столбцов и типы данных.

NULL|НЕ NULL

Поддерживается только для скомпилированных в собственном коде скалярных определяемых пользователем функций. Дополнительные сведения см. в разделе Скалярные определяемые пользователем функции для выполняющейся в памяти OLTP.

NATIVE_COMPILATION

Указывает, скомпилирована ли в собственном коде определяемая пользователем функция. Этот аргумент требуется только для скомпилированных в собственном коде скалярных определяемых пользователем функций.

Аргумент NATIVE_COMPILATION является обязательным при применении ALTER к функции и может использоваться, только если функция была создана с помощью аргумента NATIVE_COMPILATION.

НАЧНИТЕ АТОМАРНОЕ С

Поддерживается только для скомпилированных в собственном коде скалярных определяемых пользователем функций и является обязательным. Дополнительные сведения см. в разделе Атомарные блоки в собственных процедурах.

SCHEMABINDING

Аргумент SCHEMABINDING требуется для скомпилированных в собственном коде скалярных определяемых пользователем функций.

<function_option>::= и <clr_function_option>::=

Указывает, что функция будет иметь один или несколько следующих аргументов:

ШИФРОВАНИЕ

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

Указывает, что ядро СУБД шифрует столбцы представления каталога, содержащие текст инструкции ALTER FUNCTION . Использование параметра ENCRYPTION препятствует публикации данной функции при репликации SQL Server. Параметр ENCRYPTION для функций CLR указывать нельзя.

SCHEMABINDING

Указывает, что функция привязана к объектам базы данных, которые содержат ссылки на нее. Если аргумент SCHEMABINDING указан, нельзя изменить базовые объекты таким способом, который может повлиять на определение функции. Сначала необходимо изменить или удалить само определение функции, чтобы удалить зависимости от объекта, который должен быть изменен.

Привязка функции к ссылающимся на нее объектам удаляется в следующих случаях:

  • При удалении функции.

  • При изменении функции инструкцией ALTER, если не указан параметр SCHEMABINDING.

Список условий, которые должны быть соблюдены перед привязкой функции к схеме, см. в разделе CREATE FUNCTION (Transact-SQL).

ВОЗВРАЩАЕТ NULL ПРИ ВВОДЕ NULL | ВЫЗЫВАЕТСЯ ПРИ ВВОДЕ NULL

Задает OnNULLCall атрибут скалярной функции. Если не указано, CALLED ON NULL INPUT то подразумевается по умолчанию. Это означает, что тело функции выполняется, даже если NULL передается в качестве аргумента.

Если RETURNS NULL ON NULL INPUT он указан в функции CLR, он указывает, что SQL Server может возвращать, когда любой из аргументов, которые он получает NULL , имеет значение NULL, не вызывая текст функции. Если метод, указанный в <method_specifier> , уже имеет настраиваемый атрибут, RETURNS NULL ON NULL INPUTуказывающий, но ALTER FUNCTION инструкция указывает CALLED ON NULL INPUT, ALTER FUNCTION оператор имеет приоритет. Атрибут OnNULLCall нельзя указать для функций с табличным значением среды CLR.

Предложение EXECUTE AS

Указывает контекст безопасности, в котором выполняется определяемая пользователем функция. Поэтому можно отслеживать, какая учетная запись пользователя SQL Server используется для проверки разрешений на любые объекты базы данных, на которые ссылается функция.

Примечание.

Предложение EXECUTE AS не может быть указано для встроенных пользовательских функций.

Дополнительные сведения см. в разделе EXECUTE AS (Transact-SQL).

< >column_definition ::=

Определяет тип данных таблицы. Декларация таблицы включает определения столбцов и ограничений. Для функций CLR можно указать только column_name и data_type.

column_name

Имя столбца в таблице. Имена столбцов должны соответствовать правилам для идентификаторов и быть уникальными в рамках таблицы. column_name может иметь длину от 1 до 128 символов.

data_type

Указывает тип данных столбца. Для функций Transact-SQL допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типа данных timestamp. Для функций CLR допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типов данных text, ntext, image, char, varchar, varchar(max) и timestamp. Нескалярный тип данных cursor не может указываться в качестве типа данных столбца ни для функций Transact-SQL, ни для функций CLR.

СТАНДАРТНЫЕ constant_expression

Указывает значение, присваиваемое столбцу в случае отсутствия явно заданного значения при вставке. constant_expression — это константа, NULLили значение системной функции. Определения DEFAULT могут применяться к любым столбцам, кроме тех, которые имеют свойство IDENTITY. Предложение DEFAULT не может быть указано для функций CLR с табличным значением.

СОПОСТАВИТЬ collation_name

Задает параметры сортировки для столбца. Если не указано, столбцу назначаются параметры сортировки, принятые в базе данных по умолчанию. Именем параметров сортировки может быть либо имя параметров сортировки Windows, либо имя параметров сортировки SQL. Список и дополнительные сведения см. в разделе "Имя сортировки Windows " и "Имя сортировки SQL Server".

Предложение COLLATE может быть использовано для изменения параметров сортировки только для столбцов с типом данных char, varchar, nchar или nvarchar.

Предложение COLLATE не может быть указано для функций CLR с табличным значением.

ROWGUIDCOL

Указывает, что новый столбец является столбцом глобального уникального идентификатора строки. В качестве столбца ROWGUIDCOL можно назначить только один столбец uniqueidentifier для каждой таблицы. Свойство ROWGUIDCOL может быть назначено только столбцу uniqueidentifier .

Свойство ROWGUIDCOL не обеспечивает уникальности значений, хранимых в столбце. Кроме того, данное свойство не производит автоматическое формирование значений для новых строк, вставляемых в таблицу. Чтобы создать уникальные значения для каждого столбца, используйте NEWID функцию on INSERT statements. Можно указать значение по умолчанию; NEWID однако нельзя указать в качестве значения по умолчанию.

ИДЕНТИЧНОСТЬ

Указывает, что новый столбец является столбцом идентификаторов. При добавлении новой строки в таблицу SQL Server предоставляет уникальное добавочное значение для столбца. Столбцы идентификаторов обычно используются с ограничением PRIMARY KEY для поддержания уникальности идентификаторов строк в таблице. Свойство IDENTITY может назначаться для столбцов типа tinyint, smallint, int, bigint, decimal(p,0) или numeric(p,0). Для каждой таблицы можно создать только один столбец идентификаторов. Ограниченные значения по умолчанию и ограничения DEFAULT не могут использоваться в столбце идентификаторов. Необходимо указывать либо оба аргумента (и seed, и increment), либо не указывать ни одного из них. Если ничего не указано, применяется значение по умолчанию (1,1).

Предложение IDENTITY не может быть указано для функций CLR с табличным значением.

семя

Целочисленное значение, которое должно быть присвоено первой строке таблицы.

приращение

Целочисленное значение, добавляемое к начальному значению для последовательных строк в таблице.

< >column_constraint ::= и < table_constraint>::=

Определяет ограничение для указанного столбца или таблицы. Для функций CLR единственное допустимое ограничение — NULL. Именованные ограничения недопустимы.

NULL | НЕ NULL

Определяет, допустимы ли для столбца значения NULL. NULL не является строго ограничением, но может быть указан так же, как NOT NULL. NOT NULL нельзя указать для функций с табличным значением среды CLR.

ПЕРВИЧНЫЙ КЛЮЧ

Ограничение, которое обеспечивает целостность сущности для указанного столбца с помощью уникального индекса. В возвращающих табличное значение пользовательских функциях ограничение PRIMARY KEY может быть создано только для одного столбца таблицы. Ограничение PRIMARY KEY не может быть указано для функций CLR с табличным значением.

УНИКАЛЬНЫЙ

Ограничение, которое обеспечивает целостность сущностей для указанного столбца или столбцов с помощью уникального индекса. В таблице может быть несколько ограничений UNIQUE. Ограничение UNIQUE не может быть указано для функций CLR с табличным значением.

CLUSTERED | НЕКЛАСТЕРИЗОВАННЫЙ

Указывает, что для ограничения PRIMARY KEY или UNIQUE создается кластеризованный или некластеризованный индекс. Ограничения PRIMARY KEY используют параметр CLUSTERED, а ограничения UNIQUE используют параметр NONCLUSTERED.

Параметр CLUSTERED может быть указан только для одного ограничения. Если параметр CLUSTERED указан для ограничения UNIQUE и указано ограничение PRIMARY KEY, то PRIMARY KEY использует NONCLUSTERED.

Параметры СLUSTERED и NONСLUSTERED не могут быть указаны для функций CLR с табличным значением.

ПРОВЕРКА

Ограничение, обеспечивающее целостность домена путем ограничения возможных значений, которые могут быть введены в столбец или столбцы. Ограничения CHECK не могут быть указаны для функций CLR с табличным значением.

logical_expression

Логическое выражение, возвращающее значения TRUE или FALSE.

< >computed_column_definition::=

Указывает вычисляемый столбец. Дополнительные сведения о вычисляемых столбцах см. в разделе CREATE TABLE (Transact-SQL).

column_name

Имя вычисляемого столбца.

computed_column_expression

Выражение, определяющее значение вычисляемого столбца.

< >index_option::=

Указывает параметры индекса для индекса PRIMARY KEY или UNIQUE. Дополнительные сведения о параметрах индекса см. в разделе CREATE INDEX (Transact-SQL).

PAD_INDEX = { ON | OFF }

Определяет разреженность индекса. Значение по умолчанию — OFF.

FILLFACTOR = fillfactor

Указывает процент, указывающий, насколько полный ядро СУБД должен сделать конечный уровень каждой страницы индекса во время создания или изменения индекса. Значение fillfactor должно быть целым числом от 1 до 100. По умолчанию установлено значение 0.

IGNORE_DUP_KEY = { ON | OFF }

Определяет ответ на ошибку, случающуюся, когда операция вставки пытается вставить в уникальный индекс повторяющиеся значения ключа. Параметр IGNORE_DUP_KEY применяется только к операциям вставки, производимым после создания или перестроения индекса. Значение по умолчанию — OFF.

STATISTICS_NORECOMPUTE = { ON | OFF }

Указывает, выполнялся ли перерасчет статистики распределения. Значение по умолчанию — OFF.

ALLOW_ROW_LOCKS = { ON | OFF } (Включает или отключает блокировки на уровне строк)

Указывает, разрешена ли блокировка строк. Значение по умолчанию — ON.

ALLOW_PAGE_LOCKS (разрешить блокировку страниц) = { ВКЛ. | ВЫКЛ. }

Указывает, разрешена ли блокировка страниц. Значение по умолчанию — ON.

Замечания

ALTER FUNCTION не может использоваться для преобразования скалярной функции в функцию с табличным значением или наоборот. Также ALTER FUNCTION не может использоваться для преобразования одной встроенной функции в функцию из нескольких инструкций или наоборот. ALTER FUNCTION не может использоваться для преобразования функции Transact-SQL в функцию CLR или наоборот.

Следующие инструкции компонента Service Broker не могут быть включены в определение определяемой пользователем функции Transact-SQL:

  • BEGIN DIALOG CONVERSATION
  • END CONVERSATION
  • GET CONVERSATION GROUP
  • MOVE CONVERSATION
  • RECEIVE
  • SEND

Разрешения

Требует разрешения ALTER для функции или для схемы. Если в функции указан определяемый пользователем тип, требуется разрешение EXECUTE на этот тип.

В Microsoft Fabric члены роли администратора рабочей области Fabric, участника и участника могут создавать функции.