Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Создание функции этого типа выполняется с помощью команды:
CREATE FUNCTION [ имя_схемы. ] имя _функции
([ { @имя_параметра [ AS ][ имя_схемы. ] тип_данных
[ = default ] [ READONLY ] } [,...n ] ])
RETURNS TABLE
[ WITH {ENCRYPTION | SCHEMABINDING | EXECUTE AS … },[…n] ]
[ AS ]
RETURN [(] SELECT_оператор [)]
Основная часть параметров, используемых при создании табличных функций, аналогична параметрам скалярной функции. Тем не менее, создание табличных функций имеет свою специфику.
После ключевого слова RETURNS всегда должно указываться ключевое слово TABLE. Таким образом, функция данного типа должна строго возвращать значение типа данных TABLE. Структура возвращаемого значения типа TABLE не указывается явно при описании собственно типа данных. Вместо этого сервер будет автоматически использовать для возвращаемого значения TABLE структуру, возвращаемую запросом SELECT, который является единственной командой функции.
Возвращаемое функцией значение типа TABLE может быть использовано непосредственно в запросе, т.е. в разделе FROM.
Пример inline функции
Создать и применить функцию табличного типа для определения номеров счетов с наименьшей прибылью за последние K дней.
Используется общетабличное представление.
CREATE FUNCTION sales1(@k int =30)
RETURNS TABLE
AS
RETURN
WITH
pr1([номер счета],summa)
AS (SELECT [номер счета], sum(сумма) as summa
FROM R2 WHERE
ABS(DATEDIFF(DAY,GETDATE(),[Дата проведения]))<@k
GROUP BY [номер счета]),
pr2(min_sum)
AS (SELECT MIN(summa) as min_sum FROM pr1)
SELECT [номер счета] FROM pr1,pr2 where summa = pr2.min_sum
GO
-- обращение к функции
SELECT * FROM Test.dbo.sales1(25)
Дата публикования: 2015-09-17; Прочитано: 210 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!