Основы определяемых пользователем функций
Подобно функциям языков программирования, определяемые пользователем функции 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)
См. также
Основные понятия
Другие ресурсы
Основные сведения о пользовательских функциях