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

Co je funkce s hodnotou tabulky v SQL Server?

V SQL Server, funkce s hodnotou tabulky (TVF) je uživatelsky definovaná funkce, která vrací tabulku. To je na rozdíl od skalární funkce, která vrací jedinou hodnotu.

Funkci s hodnotou tabulky můžete vyvolat stejným způsobem jako dotaz na tabulku. Můžete jej například použít v SELECT prohlášení. V některých případech lze k aktualizaci, mazání a vkládání dat použít také tabulkové funkce.

Typy tabulkových funkcí

Při vytváření funkce s hodnotou tabulky máte na výběr mezi vytvořením funkce s hodnotou tabulky Transact-SQL nebo funkce s hodnotou tabulky Common Language Runtime (CLR).

Funkce s hodnotou tabulky Transact-SQL

Transact-SQL TVFs může být jeden z následujících:

Inline Table-Valued Function (ITVF)
Když vytvoříte ITVF, zahájíte definici funkce pomocí RETURNS TABLE a následující SELECT příkaz definuje strukturu návratové tabulky.
Multi-Statement Table-Valued Function (MSTVF)
Funkce s tabulkovou hodnotou s více příkazy může obsahovat více příkazů, jejichž výsledky se ukládají do proměnné, kterou deklarujete na začátku funkce. Když to uděláte, explicitně určíte strukturu návratové tabulky.

CLR Table-Valued Functions

Z pohledu CLR je syntaxe podobná T-SQL ITVF, ale mírně odlišná. Explicitně určíte strukturu návratové tabulky, ale nedeklarujete návratovou proměnnou.

Funkce CLR s hodnotou tabulky jsou implementovány jako metody na třídě v sestavení Microsoft .NET Framework.

Podrobnější přehled CLR TVF najdete v dokumentaci Microsoftu pro CLR Table-Valued Functions.

Příklad 1 – Inline Table-Valued Function

Zde je příklad kódu T-SQL použitého k vytvoření vložené funkce s hodnotou tabulky.

CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );
GO

Můžeme říci, že se jedná o inline funkci s hodnotou tabulky, protože neurčuje strukturu návratové tabulky. Jednoduše uvádí RETURNS TABLE , pak se spoléhá na SELECT k určení struktury návratové tabulky.

V tomto případě funkce vyžaduje, aby bylo jako argument předáno jméno kočky.

Příklady přidání možností, jako je vazba schématu a šifrování, najdete v části Vytvoření funkce s hodnotou vložené tabulky.

Vazba schématu je obvykle dobrý nápad, protože zabrání jakýmkoli nepříznivým změnám v podkladových objektech, na které funkce odkazuje.

Příklad 2 – Funkce s tabulkovou hodnotou s více příkazy

Zde je návod, jak bychom funkci napsali, pokud bychom chtěli, aby to byla vícepříkazová funkce s tabulkovou hodnotou.

CREATE FUNCTION udf_CatsByName_MSTVF( @CatName varchar(70) )
    RETURNS @cats TABLE (
        CatId int,
        CatName varchar(70),
        Phone varchar(10)
    )
AS
BEGIN
    INSERT INTO @cats
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName;

    RETURN;
END;
GO

V tomto případě použijeme proměnnou typu table s názvem @cats a explicitně specifikujeme strukturu návratové tabulky. Výsledky dotazu jsou uloženy v této proměnné, která je poté vrácena při vyvolání funkce.

Tento příklad není příliš spravedlivý pro MSTVF, protože uvádím pouze jedno prohlášení. Hlavním bodem MSTVF je, že můžete zahrnout více příkazů a můžete přidat výstup těchto příkazů do návratové proměnné.

Příklad použití více příkazů a také příklady přidávání možností, jako je vazba schématu a šifrování, najdete v části Vytvoření funkce s hodnotou tabulky s více příkazy.

Příklad 3 – Vyberte data z našich funkcí tabulkových hodnot

Takže teď, když jsme vytvořili naše funkce, můžeme je obě vyvolat pomocí SELECT prohlášení.

SELECT * FROM udf_CatsByName_ITVF('Tom');
SELECT * FROM udf_CatsByName_MSTVF('Tom');

Výsledek:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)
+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)

ITVF i MSTVF byly vyvolány pomocí stejné syntaxe a obě vrátily stejný výsledek.

Vyvolání funkcí s hodnotou tabulky

Tabulkové funkce lze vyvolat tam, kde jsou v FROM povoleny tabulkové výrazy klauzule SELECT , INSERT , UPDATE nebo DELETE prohlášení.

To znamená, že můžete vybírat data, vkládat data, aktualizovat data a dokonce mazat data pomocí funkce s tabulkovou hodnotou.

Zde jsou články, které každý z nich demonstrují:

  • Výběr dat pomocí funkce s hodnotou tabulky
  • Aktualizujte data pomocí funkce s hodnotou tabulky
  • Vkládání dat pomocí funkce s hodnotou tabulky
  • Odstranění dat pomocí funkce s hodnotou tabulky

  1. Použití pouze navigace pomocí klávesnice ve Wordu, Excelu a PowerPointu (část 1:Pás karet)

  2. 8 způsobů, jak přidat dny k datu v MariaDB

  3. Přehled křížové replikace PostgreSQL a MySQL

  4. Úvod do auto_explain:Jak automaticky zaznamenávat pomalé plány dotazů Postgres