В 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.