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

Подобно функциям языков программирования, определяемые пользователем функции Microsoft SQL Server 2005 являются подпрограммами, которые принимают параметры, выполняют действия (например, какие-то сложные вычисления) и затем возвращают результат выполнения в виде значения. Результат может быть либо скалярным значением, либо результирующим набором.

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

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

  • Делают возможным модульное программирование.
    Можно, однажды создав функцию, сохранить ее в базе данных, а затем любое число раз вызывать из своей программы. Определяемые пользователем функции могут быть изменены независимо от исходного кода программы.
  • Они позволяют ускорить выполнение.
    Как и хранимые процедуры, определяемые пользователем функции Transact-SQL снижают стоимость компиляции кода Transact-SQL, кэшируя и повторно используя планы выполнения. Это означает, что для определяемых пользователем функций нет необходимости выполнять повторный синтаксический анализ и оптимизацию при каждом вызове, что значительно ускоряет их выполнение.
    Функции CLR предоставляют значительный выигрыш в производительности по сравнению с функциями Transact-SQL для вычислительных задач, работы со строками и бизнес-логикой. Функции Transact-SQL лучше приспособлены для логики доступа к данным.
  • Позволяют уменьшить сетевой трафик.
    Операция, которая фильтрует данные на основе какого-нибудь сложного ограничения и не может быть выражена одним скалярным выражением, может быть реализована в виде функции. Ее можно вызвать из предложения WHERE, чтобы уменьшить число строк, возвращаемых клиенту.

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

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

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

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

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

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

  • одну или несколько инструкций 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)

См. также

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

Типы функций

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

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

Справка и поддержка

Получение помощи по SQL Server 2005