SELECT
příkaz je pravděpodobně nejběžněji používaným příkazem na serveru SQL Server. Většinu času je tento příkaz spuštěn proti pohledu nebo přímo proti tabulce za účelem načtení řádků tabulkových dat.
Pohledy a tabulky však nejsou jedinými objekty, u kterých můžete spustit SELECT
prohlášení o. SELECT
lze také použít na jiné objekty, jako jsou funkce sady řádků, OPENXML a uživatelsky definované funkce.
Tento článek poskytuje příklad výběru dat pomocí funkce s hodnotou tabulky.
Příklad 1 – Základní funkce
Zde je rychlá funkce, která vybírá základní data z tabulky prostřednictvím vložené funkce s hodnotou tabulky.
SELECT * FROM udf_Cats_ITVF();
Výsledek:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Funkce vypadá takto:
CREATE FUNCTION dbo.udf_Cats_ITVF() RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats ); GO
Tato funkce jednoduše vybere všechny řádky z tabulky. Nejsou vyžadovány žádné argumenty.
Pokud byste chtěli vybrat určitou kočku, musíte přidat WHERE
doložka.
SELECT * FROM udf_Cats_ITVF() WHERE CatName = 'Fetch';
Výsledek:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Nyní musím uznat, že tato funkce je jaksi nadbytečná, protože jsme mohli data vybrat přímo z tabulky. Nebo jsme si mohli vytvořit pohled, abychom tu práci udělali. Ale uživatelsky definované funkce mají výhodu, kterou tabulky a pohledy nemají:parametry.
Příklad 2 – Funkce s parametry
Jednou z výhod tabulkových funkcí je, že podporují parametry. Zde se funkce stává o něco užitečnější. Někteří označují funkce s hodnotou tabulky jako „parametrizované pohledy“, protože se chovají stejně jako pohledy, ale s přidanou funkcí povolení parametrů.
Mohli bychom tedy vytvořit variaci předchozí funkce, abychom přijali argument pro jméno kočky.
SELECT * FROM udf_CatsByName_ITVF('Fetch');
Výsledek:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Nová funkce vypadá takto:
CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) ) RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName ); GO
Příklad 3 – Spojení
Do spojení lze zahrnout funkce s tabulkovou hodnotou.
Zde vyberu všechny sloupce z tabulkové funkce, která vrátí všechna alba daného interpreta:
SELECT * FROM ufn_AlbumsByArtist(1);
Výsledek:
+------------+-------------------------+---------+ | ArtistId | AlbumName | Genre | |------------+-------------------------+---------| | 1 | Powerslave | Rock | | 1 | Somewhere in Time | Rock | | 1 | Piece of Mind | Rock | | 1 | Killers | Rock | | 1 | No Prayer for the Dying | Rock | +------------+-------------------------+---------+
Jediným problémem této funkce je, že nevrací jméno umělce. Pokud chci jméno interpreta, musím ho spojit s tabulkou, která tato data obsahuje. V tomto případě se tabulka obsahující jméno interpreta nazývá Artists
, takže mohu svůj dotaz upravit následovně:
SELECT ar.ArtistName, aba.AlbumName, aba.Genre FROM ufn_AlbumsByArtist(1) aba INNER JOIN Artists ar ON aba.ArtistId = ar.ArtistId;
Výsledek:
+--------------+-------------------------+---------+ | ArtistName | AlbumName | Genre | |--------------+-------------------------+---------| | Iron Maiden | Powerslave | Rock | | Iron Maiden | Somewhere in Time | Rock | | Iron Maiden | Piece of Mind | Rock | | Iron Maiden | Killers | Rock | | Iron Maiden | No Prayer for the Dying | Rock | +--------------+-------------------------+---------+