sql >> Databáze >  >> RDS >> Sqlserver

Vyberte data prostřednictvím funkce s hodnotou tabulky na serveru SQL Server

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    |
+--------------+-------------------------+---------+

  1. Přejmenování indexů pomocí procedury sp_rename

  2. Kontrola id oracle a názvu databáze

  3. Jak určit počet dní v měsíci na serveru SQL?

  4. PostgreSQL - načte řádek, který má pro sloupec hodnotu Max