Когда использовать мультиоператорную табличную функцию
Что многооператорная табличная Функция?
Вызов подставляемой табличной функции
Пример подставляемой табличной функции
Следующий пример создает подставляемую табличную функцию, которая возвращает имена подчиненных для определенного менеджера в базе данных AdventureWorks.
CREATE FUNCTION HumanResources.EmployeesForManager
(@ManagerId int)
RETURNS TABLE
AS
RETURN (
SELECT FirstName, LastName
FROM HumanResources.Employee Employee INNER JOIN
Person.Contact Contact
ON Employee.ContactID = Contact.ContactID
WHERE ManagerID = @ManagerId )
Используйте подставляемую табличную функцию везде, где Вы обычно использовали бы представление, такое как в выражении FROM оператора SELECT. Следующие примеры позволяют получить имена всех служащих для двух менеджеров.
SELECT * FROM HumanResources.EmployeesForManager(3)
-- OR
SELECT * FROM HumanResources.EmployeesForManager(6)
Многооператорная табличная функция - комбинация представления и хранимой процедуры. Вы можете использовать определяемые пользователем функции, которые возвращают таблицу, чтобы заменить хранимую процедуру или представление.
Табличная функция (как хранимая процедура) может использовать сложную логику и множество операторов Transact-SQL, чтобы построить таблицу. Таким же образом, каким Вы используете представление, Вы можете использовать табличную функцию в выражении FROM оператора Transact-SQL.
Рассмотрите следующие характеристики многооператорных табличных функций:
■ оператор RETURNS определяет tableв качестве возвращаемого типа данных и определяет формат и название для таблицы.
■ блок BEGIN … END ограничивает тело функции.
Следующий пример создает табличную переменную с двумя столбцами, названную @tbl_Employees. Второй столбец изменяется в зависимости от требуемого значенияпараметра@format.
Вы можете вызвать функцию в выражении FROM вместо таблицы или представления. Следующие примеры позволяют получить имя служащего в длинном или коротком формате.
SELECT * FROM HumanResources.EmployeeNames('LONGNAME')
-- OR
SELECT * FROM HumanResources.EmployeeNames('SHORTNAME')