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


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

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

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

Определяемые пользователем функции SQL Server предоставляют следующие преимущества.

  • Делают возможным модульное программирование.

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

  • Позволяют ускорить выполнение.

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

    Функции CLR предоставляют значительный выигрыш в производительности по сравнению с функциями Transact-SQL для вычислительных задач, работы со строками и бизнес-логикой. Функции Transact-SQL лучше приспособлены для логики доступа к данным.

  • Позволяют уменьшить сетевой трафик.

    Операция, которая фильтрует данные на основе какого-нибудь сложного ограничения и не может быть выражена одним скалярным выражением, может быть реализована в виде функции. Ее можно вызвать из предложения WHERE, чтобы уменьшить число строк, возвращаемых клиенту.

Компоненты определяемой пользователем функции

Определяемые пользователем функции могут быть написаны на языке Transact-SQL или на любом языке программирования .NET. Сведения об использовании в функциях языков .NET см. в разделе Определяемые пользователем функции среды CLR.

Любая определяемая пользователем функция состоит из двух частей: заголовка и текста. Функция принимает нуль и более параметров и возвращает либо скалярное значение, либо таблицу.

Заголовок определяет:

  • имя функции с необязательным именем схемы или владельца;

  • имя и тип данных входного аргумента;

  • параметры, применимые к входному аргументу;

  • тип данных возвращаемого значения и необязательное имя;

  • параметры, применимые к возвращаемому значению.

Текст определяет действие или логику, которую выполняет функция. Он может содержать:

  • одну или несколько инструкций Transact-SQL, реализующих логику функции;

  • ссылку на сборку .NET.

В следующем примере показана простая определяемая пользователем функция Transact-SQL и обозначены ее главные компоненты. Функция на основе переданной даты вычисляет и возвращает день недели, соответствующий этой дате.

IF OBJECT_ID(N'dbo.GetWeekDay', N'FN') IS NOT NULL
    DROP FUNCTION dbo.GetWeekDay;
GO
CREATE FUNCTION dbo.GetWeekDay           -- function name
(@Date datetime)                     -- input parameter name and data type
RETURNS int                          -- return parameter data type
AS
BEGIN                                -- begin body definition
RETURN DATEPART (weekday, @Date)     -- action performed
END;
GO

Следующий пример показывает вызов функции из инструкции Transact-SQL.

SELECT dbo.GetWeekDay(CONVERT(DATETIME,'20020201',101)) AS DayOfWeek;
GO

Ниже приводится результирующий набор.

DayOfWeek
---------
6  
(1 row(s) affected)

См. также

Основные понятия

Другие ресурсы