Однострочные табличнозначные функции

Для однострочных табличнозначных функций предложение RETURNS задает TABLE (таблицу) без указания списка столбцов. Функции этого типа определяются единственным оператором SELECT, представляющим тело функции. Столбцы, включающие типы данных таблицы, возвращаемой функцией, определяются списком SELECT, который определяет функцию. Например:

CREATE FUNCTION fn_CustomerNamesInRegion
(@RegionParameter char (30))
RETURNS TABLE
AS
RETURN
(
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = @RegionParameter
)

Ниже приведен пример вызова рассмотренной выше однострочной табличнозначной функции:

SELECT * FROM fn_CustomerNamesInRegion ('WA')

Многооператорные табличнозначные функции

Если предложение RETURNS задает тип TABLE с определением столбцов и их типов данных, функция является многооператорной табличнозначной функцией. Например:

CREATE FUNCTION LargeOrderShippers
(@FreightParm money)
RETURNS @OrderShipperTab TABLE
(
ShipperID int,
ShipperName char (80),
OrderID int,
ShippedDate datetime,
Freight money
)
AS
BEGIN
INSERT @OrderShipperTab
SELECT S.ShipperID, S.CompanyName,
O.OrderID, O.ShippedDate, O.Freight
FROM Shippers AS S INNER JOIN Orders AS O
ON S.ShipperID = O.ShipVia
WHERE O.Freight > @FreightParm
RETURN
END

Предложение RETURNS в данном примере определяет локальную возвращаемую переменную типа table с именем @OrderShipperTab, а также определяет структуру таблицы с определениями столбцов.

Операторы в теле функции вставляют строки в переменную @OrderShipperTab, создавая табличный набор строк, который возвращается функцией. При этом оператор возврата RETURN не имеет аргумента, значение возвращаемой переменной функции возвращается как значение функции.

Ниже приводится пример, который вызывает многооператорную табличнозначную функцию:

SELECT *
FROM LargeOrderShippers ($500)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: