-
Notifications
You must be signed in to change notification settings - Fork 2
25. Функции Transact SQL
SQL Server содержит набор встроенных функций и предоставляет возможность создавать пользовательские функции (User Defined Function – UDF). Различают детерминированные и недетерминированные функции.
Функция является детерминированной, если при одном и том же заданном входном значении она всегда возвращает один и тот же результат.
Функция является недетерминированной, если она может возвращать различные значения при одном и том же заданном входном значении.
Пользовательские функции в зависимости от типа данных возвращаемых ими значений могут быть скалярными и табличными.
Табличные пользовательские функции бывают двух типов: подставляемые и многооператорные.
Скалярные пользовательские функции обычно используются в списке столбцов инструкции SELECT
и в предложении WHERE
. Табличные пользовательские функции обычно используются в предложении FROM
, и их можно соединять с другими таблицами и представлениями.
Для создания скалярной функции используется инструкция CREATE FUNCTION
, имеющая следующий синтаксис:
CREATE FUNCTION [ имя-схемы. ] имя-функции ( [ список-объявлений- параметров ] )
RETURNS скалярный-тип-данных [ WITH список-опций-функций ]
[ AS ]
BEGIN
тело-функции
RETURN скалярное-выражение END [ ; ]
Синтаксис вызова скалярных функций:
имя-схемы.имя-функции ( [ список-параметров ] )
Для скалярной функции можно использовать инструкцию EXECUTE или EXEC:
EXECUTE @возвращаемое-значение = имя-функции ( [ список-параметров ] )
Синтаксис создания подставляемой табличной функции выглядит так:
CREATE FUNCTION [ имя-схемы. ] имя-функции ( [ список-объявлений- параметров ] )
RETURNS TABLE
[ WITH список-опций-функций ]
[ AS ]
RETURN [ ( ] выражение-выборки [ ) ]
END [ ; ]
Синтаксис создания многооператорной табличной функции:
CREATE FUNCTION [ имя-схемы. ] имя-функции ( [ список-объявлений- параметров ] )
RETURNS @имя-возвращаемой-переменной TABLE определение-таблицы [ WITH список-опций-функций ]
[ AS ]
BEGIN
тело-функции
RETURN END [ ; ]