В SQL Server, функцията със стойност на таблица с множество изрази е един от двата типа функции с таблично стойности на Transact-SQL (другият тип е вградената функция с стойност на таблица).
Функциите с таблично стойности (TVF) са тип дефинирана от потребителя функция, която връща резултатите си като таблица. Следователно те могат да бъдат запитани точно като нормална таблица.
TVF с множество оператори (понякога наричани MSTVF) могат да се състоят от множество изрази, резултатите от които се съхраняват в променлива за връщане. Вие включвате спецификациите на връщащата променлива в горната част на функцията. Това определя структурата на таблицата за връщане. С други думи, вие посочвате колко колони, техните имена, типове данни и т.н.
Това е в контраст с вградените TVF (наричани още ITVF), които не използват връщаща променлива (таблицата за връщане се дефинира от SELECT изявление).
MSTVF също използват BEGIN /END синтаксис, което е друго нещо, което ги отличава от ITVF (ITVF не използват този синтаксис).
Пример за функция с таблична стойност с множество изрази
Ето пример за основен MSTVF:
CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70))
RETURNS @pets TABLE (
PetId varchar(20),
PetName varchar(70)
)
AS
BEGIN
INSERT INTO @pets
SELECT
CONCAT('Cat', ' ', CatId),
CatName
FROM dbo.Cats
WHERE CatName = @PetName;
INSERT INTO @pets
SELECT
CONCAT('Dog', ' ', DogId),
DogName
FROM dbo.Dogs
WHERE DogName = @PetName;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO @pets
VALUES (
'',
'There are no pets of that name.'
)
END
RETURN;
END;
GO
Тук стартирам функцията, като дефинирам връщащата променлива, наречена @pets . Това е тип таблица и ще върне две колони.
В този случай имам две SELECT оператори и IF изявление. Резултатите от всеки от тях се съхраняват в променливата за връщане. Това се прави чрез INSERT изявление всеки път.
Опции за функции
Можете също да посочите неща като дали да използвате или не свързване на схема (вероятно трябва) и дали да шифровате функцията или не.
Обвързването на схемата ще предотврати извършването на всякакви неблагоприятни промени в основните обекти, от които зависи функцията (като отпадане на таблица, промяна на колона и т.н.).
Шифроването ще преобразува дефиницията на функцията в обфускиран формат (за да попречи на другите да могат да я прочетат).
Вижте Създаване на функция с многозначни таблични стойности за примери за добавяне на обвързване на схема и криптиране към ITVF.