V SQL Server, funkce s vícepříkazovými tabulkami je jedním ze dvou typů funkcí s hodnotou tabulky Transact-SQL (druhým typem je funkce s hodnotou inline tabulky).
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.
Vícepříkazové TVF (někdy označované jako MSTVF) se mohou skládat z více příkazů, jejichž výsledky jsou uloženy v návratové proměnné. V horní části funkce zahrnete specifikace návratové proměnné. To určuje strukturu návratové tabulky. Jinými slovy, určíte počet sloupců, jejich názvy, datové typy atd.
To je na rozdíl od inline TVF (také označovaných jako ITVF), které nepoužívají návratovou proměnnou (návratová tabulka je definována pomocí SELECT
prohlášení).
MSTVF také používají BEGIN
/END
syntaxe, což je další věc, která je odlišuje od ITVF (ITVF tuto syntaxi nepoužívají).
Příklad funkce s tabulkovou hodnotou s více příkazy
Zde je příklad základního 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
Zde začnu funkci definováním návratové proměnné nazvané @pets
. Je typu table a vrátí dva sloupce.
V tomto případě mám dva SELECT
příkazy a IF
prohlášení. Výsledky každého z nich jsou uloženy v návratové proměnné. To se provádí pomocí INSERT
pokaždé.
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 naleznete v části Vytvoření vícehodnotové funkce s tabulkovou hodnotou.