В SQL Server, вградената функция със стойност на таблица е един от двата типа функции с таблична стойност на Transact-SQL (другият тип е функцията с таблична стойност с множество изрази).
Функциите с таблично стойности (TVF) са тип дефинирана от потребителя функция, която връща резултатите си като таблица. Следователно те могат да бъдат запитани точно като нормална таблица.
Вградените TVF (понякога наричани ITVF) нямат свързани променливи за връщане. Връщаната стойност се дефинира чрез единичен SELECT изявление. Този израз дефинира структурата на таблицата за връщане. Това е в контраст с TVF с множество оператори (наричани още MSTVF), които изискват връщаща променлива.
ITVF също не използват BEGIN /END синтаксис, което е друго нещо, което ги отличава от MSTVF.
Често се смята, че вградените TVF имат по-добра производителност в сравнение с TVF с множество оператори, въпреки че това също ще зависи от това, което се опитвате да направите във функцията.
Пример за вградена функция с таблично стойност
Ето пример за основен ITVF:
CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int)
RETURNS TABLE
AS
RETURN (
SELECT
al.ArtistId,
al.AlbumName,
g.Genre
FROM dbo.Albums al
INNER JOIN dbo.Artists ar
ON al.ArtistId = ar.ArtistId
INNER JOIN Genres g
ON al.GenreId = g.GenreId
WHERE al.ArtistId = @ArtistId
);
GO
Основно се състои от SELECT изявление, увито в някакъв друг код. За да го направите специално вграден TVF, стартирах функцията с RETURNS TABLE , следван отблизо от RETURN и завършващи с SELECT израз в скоби.
Множество изявления
Въпреки че вградените функции със стойности на таблица не са проектирани за множество SELECT изрази (за това са MSTVF), е възможно да се използва UNION оператор за комбиниране на резултатния набор от множество изрази.
Пример:
CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70))
RETURNS TABLE
AS
RETURN (
SELECT
CONCAT('Cat', ' ', CatId) AS PetId,
CatName
FROM dbo.Cats
WHERE CatName = @PetName
UNION ALL
SELECT
CONCAT('Dog', ' ', DogId) AS PetId,
DogName
FROM dbo.Dogs
WHERE DogName = @PetName
);
GO
Опции за функции
Можете също да посочите неща като дали да използвате или не свързване на схема (вероятно трябва) и дали да шифровате функцията или не.
Обвързването на схемата ще предотврати извършването на всякакви неблагоприятни промени в основните обекти, от които зависи функцията (като отпадане на таблица, промяна на колона и т.н.).
Шифроването ще преобразува дефиницията на функцията в обфускиран формат (за да попречи на другите да могат да я прочетат).
Вижте Създаване на вградена функция с стойност на таблица за примери за добавяне на обвързване на схема и криптиране към ITVF.