V SQL Server, funkce vložená tabulka s hodnotou je jedním ze dvou typů funkcí s tabulkovou hodnotou Transact-SQL (druhým typem je funkce s tabulkovou hodnotou s více příkazy).
Tabulkové funkce (TVF) jsou typem uživatelem definovaných funkcí, které vracejí své výsledky jako tabulku. Lze je tedy dotazovat stejně jako normální tabulku.
Inline TVF (někdy označované jako ITVF) nemají přidružené návratové proměnné. Návratová hodnota je definována pomocí jediného SELECT prohlášení. Tento příkaz definuje strukturu návratové tabulky. To je na rozdíl od vícepříkazových TVF (také označovaných jako MSTVF), které vyžadují návratovou proměnnou.
ITVF také nepoužívají BEGIN /END syntaxe, což je další věc, která je odlišuje od MSTVF.
Inline TVF jsou často považovány za ty, které mají lepší výkon než TVF s více příkazy, i když to bude také záviset na tom, co se ve funkci snažíte dělat.
Příklad vložené funkce s hodnotou tabulky
Zde je příklad základního 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
V podstatě se skládá z SELECT příkaz zabalený do nějakého jiného kódu. Aby to bylo konkrétně vložené TVF, spustil jsem funkci pomocí RETURNS TABLE , těsně následovaný RETURN a končící SELECT prohlášení v závorkách.
Více příkazů
Ačkoli vložené funkce s hodnotou tabulky nejsou navrženy pro více SELECT příkazy (k tomu slouží MSTVF), je možné použít UNION operátor pro spojení výsledné sady více příkazů.
Příklad:
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
Možnosti funkcí
Můžete také určit věci jako, zda použít nebo ne použít vazbu schématu (pravděpodobně byste měli) a zda funkci šifrovat či nikoli.
Vazba schématu zabrání jakýmkoli nepříznivým změnám v základních objektech, na kterých funkce závisí (jako je vypuštění tabulky, změna sloupce atd.).
Šifrování převede definici funkce do zamlženého formátu (aby ji ostatní nemohli číst).
Příklady přidání vazby schématu a šifrování do ITVF najdete v části Vytvoření funkce s hodnotou vložené tabulky.