Разработка серверной части ИС в СУБД MS SQL Server. Особенности настройки свойств таблиц. Общие рекомендации по выбору типа данных, страница 4

[имя_схемы.] имя_функции - имя функции, которое должно соответствовать правилам для идентификаторов объектов. Дополнительно в необязательном параметре [имя_схемы.] можно указать и имя владельца функции – это должно быть имя пользователя или роли, имеющихся в БД. Если имя владельца опущено, то создаваемая функция будет принадлежать пользователю, выполняющему создание функции. При этом нужно учитывать, что имя функции должно быть уникальным среди различных объектов БД, принадлежащих владельцу функции. В параметре [имя_схемы.] не допускается указание имени БД или сервера. Таким образом, пользовательская функция может быть создана только в текущей БД. Если необходимо создать функцию в другой БД, то сначала нужно установить эту БД в качестве текущей с помощью команды USE имя_БД.

@имя_параметра – имя входного параметра (начинается с символа @), должно быть уникальным в пределах создаваемой функции.

тип_данных_параметра – допускается использование любого из поддерживаемых SQL Server типов данных, включая пользовательские, за исключением типов данных timestamp, cursor, table.

[ = значение_параметра_по_умолчанию ] – значение, которое будет автоматически присваиваться входному параметру, если пользователь явно не указал значение при вызове функции.

[, …n] – указывает на возможность задания многих параметров функции, используя синтаксис, аналогичный описанному.

RETURNS тип_возвращаемых_данных – указывается, какой тип данных будет иметь значение, возвращаемое функцией. Скалярные функции могут возвращать значения любых типов данных, за исключением типов данных timestamp, cursor, table, text, ntext, image.

[ WITH <function_option> [, …n] ] – с помощью ключевого слова WITH могут быть указаны дополнительные параметры, с которыми должна быть создана функция. Конструкция <function_option> имеет синтаксис:

<function_option>::=

{ [ENCRYPTION] | [SCHEMABINDING] | [EXECUTE_AS_Clause] }

где параметры принимают значения: ENCRYPTION означает, что SQL Server шифрует определение функции при его сохранении; SCHEMABINDINGзапрещает удаление любых объектов, от которых зависит функция; EXECUTE_ASопределяет контекст безопасности функции.

[AS] – после этого необязательного ключевого слова следует определение тела функции.

BEGIN…END – блок, внутри которого находится тело_функции, включающее основные операторы, обеспечивающие работу функции. В теле функции возможно выполнение различного кода, обращение к другим объектам БД. Ограничением является невозможность изменения с помощью функции состояния любого объекта в БД или самой БД (вставка, обновление, удаление данных в таблицах; создание, изменение, удаление объектов в БД). Для обработки данных таблиц используются табличные переменные и функции, возвращающие табличные значения.

RETURN скалярное_выражение – когда в ходе выполнения кода функции встречается ключевое слово RETURN, выполнение функции завершается и как результат вычисления функции возвращается значение, указанное сразу после ключевого слова RETURN.

В качестве примера рассмотрим создание функции FunctionA, имеющей 3 входных параметра: первые два параметра (переменные @Var1, @Var2) с типом данных bigint, третий (переменная @Operation) – с типом данных char(1) и значением по умолчанию *. Функция возвращает значение типа данных bigint и выполняет четыре основных арифметических операции: сложение, вычитание, умножение и деление двух значений, подаваемых на вход функции. Операция, которую необходимо выполнить, задается с помощью третьего параметра текстового типа, принимающего соответственно значения: +, -, *, / . Переменная @Var3 нужна, чтобы возвращать значение функции.

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

1.3.2. Внедренные табличные функции (функции Inline)

Внедренная табличная функция не имеет в своем теле блока BEGIN…END – вместо этого возвращается результирующий набор данных инструкции SELECT в виде таблицы с заданным именем.

Общий синтаксис внедренной табличной функции:

CREATE FUNCTION [имя_схемы.] имя_функции

( [ { @имя_параметра  тип_данных_параметра

          [ = значение_параметра_по_умолчанию ] }

          [, …n]   ]  )

RETURNS TABLE

          [ WITH <function_option> [, …n] ]

[ AS ]

RETURN [ ( ] инструкция_SELECT [ ) ]