Основы определяемых пользователем функций
Подобно функциям в языках программирования, определяемые пользователем функции Microsoft SQL Server являются подпрограммами, которые принимают параметры, выполняют действия, такие как сложные вычисления, а затем возвращают результат этих действий в виде значения. Возвращаемое значение может быть либо единичным скалярным значением, либо результирующим набором.
Преимущества определяемых пользователем функций
Определяемые пользователем функции SQL Server предоставляют следующие преимущества.
Делают возможным модульное программирование.
Можно, однажды создав функцию, сохранить ее в базе данных, а затем любое число раз вызывать из своей программы. Определяемые пользователем функции могут быть изменены независимо от исходного кода программы.
Позволяют ускорить выполнение.
Как и хранимые процедуры, определяемые пользователем функции Transact-SQL снижают стоимость компиляции кода Transact-SQL, кэшируя и повторно используя планы выполнения. Это означает, что для определяемых пользователем функций нет необходимости выполнять повторный синтаксический анализ и оптимизацию при каждом вызове, что значительно ускоряет их выполнение.
Функции CLR предоставляют значительный выигрыш в производительности по сравнению с функциями Transact-SQL для вычислительных задач, работы со строками и бизнес-логикой. Функции Transact-SQL лучше приспособлены для логики доступа к данным.
Позволяют уменьшить сетевой трафик.
Операция, которая фильтрует данные на основе какого-нибудь сложного ограничения и не может быть выражена одним скалярным выражением, может быть реализована в виде функции. Ее можно вызвать из предложения WHERE, чтобы уменьшить число строк, возвращаемых клиенту.
Примечание |
---|
Определяемые пользователем функции Transact-SQL в запросах могут выполняться только как один поток (план последовательного выполнения). |
Компоненты определяемой пользователем функции
Определяемые пользователем функции могут быть написаны на языке 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)
См. также