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

Основная часть параметров соответствует параметрам, рассмотренным для скалярных функций. Особенностью функции Inline является то, что структура возвращаемого значения с типом данных table не указывается явно. Вместо этого сервер будет автоматически использовать для возвращаемого табличного значения структуру, возвращаемую запросом SELECT, который является единственной командой функции. Код этого запроса задается параметром инструкция_SELECT и может быть дополнительно помещен в круглые скобки. Возвращаемое функцией значение table может быть использовано непосредственно в запросе, то есть в разделе FROM запроса можно указывать имя функции со всеми входными параметрами. Таким образом, функция Inline возвращает в качестве результата таблицу, которую можно использовать как любую другую таблицу БД.

Пример 1. Рассмотрим создание и использование функции Inline с именем FunctionB, которая возвращает список фамилий и имен студентов определенного факультета (факультет задается в качестве аргумента функции) из таблицы Студенты:

Пример 2. Создадим функцию с именем GetPrice, которая будет возвращать таблицу товаров и рассчитывать для каждой строки произведение количества и цены товара (общую стоимость товара).

CREATE FUNCTION GetPrice()

RETURNS TABLE

[ AS ]

RETURN

(SELECT Дата, [Название_товара], Цена, Количество, Цена*Количество AS Сумма

FROM Товары)

Для примера создана функция без параметров, в этом случае после имени функции задаются пустые круглые скобки. Для функции данного типа после RETURN нужно в скобках указать запрос, результат которого и будет возвращаться функцией. У всех полей запроса должны быть имена (при отсутствии имен, например, для вычисляемых выражений, они задаются с помощью слова AS).

Созданная функция может вызываться с помощью оператора SELECT, например:

SELECT * FROM GetPrice()

или

SELECT * FROM GetPrice() WHERE Количество=1

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

1.3.3. Табличные функции с множеством инструкций (функции Multi-statement)

Данные функции, как и функции Inline, возвращают значение табличного типа. В отличие от внедренных табличных функций, при создании функции Multi-statement необходимо явно задать структуру возвращаемого значения. Эта структура указывается сразу после ключевого слова TABLE и, таким образом, является частью определения возвращаемого типа данных.

Общий синтаксис функции Multi-statement:

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

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

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

          [, …n]   ]  )

RETURNS @возвращаемая_переменная

TABLE <определение_табличного_типа_ данных>

[ WITH <function_option> [, …n] ]

          [ AS ]

          BEGIN

тело_функции

                    RETURN

          END [ ; ]

Элементы синтаксиса соответствуют приведенным для скалярных функций, конструкция <определение_табличного_типа_ данных> имеет синтаксис:

<определение_табличного_типа_ данных> :: =

( { <определение_столбца> | <ограничение_таблицы> } [, …n] )

где элементы <определение_столбца>, <ограничение_таблицы> полностью соответствуют аналогичным элементам, используемым при создании таблиц с помощью команды CREATE TABLE.

Набор данных, возвращаемых функцией, должен формироваться с помощью команды INSERT, выполняемой в теле функции. В теле функции допускаются различные конструкции T-SQL, которые могут контролировать значения, размещаемые в наборе записей. При работе с командой INSERT необходимо явно указать имя объекта, в который необходимо вставить строки. Это имя указывается с помощью табличной переменной с именем @возвращаемая_переменная. Работа функции завершается при наличии ошибок выполнения или когда в коде встречается ключевое слово RETURN. В отличие от скалярных функций при использовании команды RETURN не нужно указывать значение, которое должно быть возвращено. Сервер автоматически возвратит набор данных табличного типа, имя и структура которого указана после ключевого слова RETURNS.