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

Úvod do uživatelsky definovaných funkcí v SQL Server

SQL Server je dodáván s kolekcí vestavěných funkcí, které vám umožňují provádět různé operace. Každá vestavěná funkce slouží konkrétnímu účelu a nelze ji upravovat. Pokud funkce slouží vašemu účelu, můžete ji používat.

Ale co když nemůžete najít funkci, která slouží vašemu účelu?

Pak je čas napsat vlastní uživatelsky definovanou funkci.

Co je to uživatelsky definovaná funkce?

uživatelem definovaná funkce (UDF) je rutina, která může přebírat parametry, provádět výpočty nebo jiné akce a vracet výsledek. A jak název napovídá, je definován a vytvořen uživatelem. V tomto případě je „uživatelem“ programátor SQL, DBA nebo kdokoli, kdo napsal funkci.

Termín uživatelsky definovaná funkce ji odlišuje od vestavěných funkcí, které jsou dodávány se serverem SQL.

Můžete určit, zda bude UDF přijímat nějaké parametry, a pokud ano, jejich názvy, datové typy atd. Můžete například napsat UDF, které akceptuje ID produktu jako argument. Funkce to pak může použít při svém výpočtu. To znamená, že výstup funkce bude záviset na vstupu, který je jí dodán, když je vyvolána.

Jakmile je UDF vytvořen, lze jej vyvolat.

Vyvolání uživatelem definované funkce

Kód uvnitř funkce se při vytvoření funkce nespustí. Provede se pouze tehdy, když je funkce vyvolána .

„Vyvolání“ funkce se někdy nazývá „volání“ funkce. To je, když dostanete funkci, aby dělala to, k čemu byla vytvořena. V podstatě vytvoříte funkci a pak tam jen sedí a čeká na vyvolání.

Můžete vyvolat UDF z vašeho T-SQL kódu, stejně jako byste volali systémovou funkci. Můžete například použít UDF v WHERE klauzule za účelem zúžení výsledků SELECT prohlášení. Můžete jej také použít v seznamu sloupců pro návrat.

UDF lze také použít ve počítaných sloupcích. To může být užitečné, pokud někdy potřebujete vypočítaný sloupec pro přístup k datům v jiném sloupci.

Parametry

Uživatelem definovaná funkce může přijmout až 1024 vstupních parametrů. V případě potřeby však můžete také definovat funkci bez jakýchkoli parametrů.

Příkladem vestavěné funkce bez parametrů je GETDATE() . Tato funkce jednoduše vrátí aktuální časové razítko databázového systému. K tomu není třeba zadávat žádné parametry.

Příkladem uživatelsky definované funkce s jediným parametrem může být funkce, která vrací kontaktní údaje zákazníka na základě jeho ID. Když funkci zavoláte, předáte funkci jako parametr ID zákazníka. Funkce pak může vyhledat podrobnosti o zákazníkovi a vrátit je v návratové proměnné. Pokud zadáte ID jiného zákazníka, funkce vrátí podrobnosti o tomto zákazníkovi.

Výhody uživatelsky definovaných funkcí

Některé z hlavních výhod UDF zahrnují následující.

Modulární programování
UDF umožňují napsat kód jednou a poté jej volat tolikrát, kolikrát je potřeba. Není třeba přepisovat stejný kód pokaždé, když potřebujete udělat totéž. Jednoduše místo toho funkci zavolejte. To je také výhodné, pokud se něco změní. Stačí jej aktualizovat na jediném místě – funkci. Pokud jste funkci nepoužili, budete ji muset aktualizovat na více místech v aplikaci.
Výkon
UDF snižují náklady na kompilaci kódu T-SQL ukládáním plánů do mezipaměti a jejich opětovným použitím pro opakované spouštění. UDF není nutné znovu analyzovat a znovu optimalizovat při každém použití. Výsledkem je mnohem rychlejší doba provádění.
Snížený provoz v síti
Operaci, která filtruje data na základě komplexního omezení, které nelze vyjádřit jediným skalárním výrazem, lze vyjádřit jako funkci. Funkci pak lze vyvolat v WHERE klauzule ke snížení počtu řádků odeslaných klientovi.

UDF mohou mít také další, konkrétnější výhody, jako v předchozím příkladu, který jsem zmínil s vypočítaným sloupcem pro přístup k datům v jiné tabulce.

Typy uživatelsky definovaných funkcí

Existují dva typy uživatelsky definovaných funkcí T-SQL:

Skalární funkce
Uživatelsky definované skalární funkce vracejí jednu datovou hodnotu. Typ hodnoty definujete ve funkci. Návratový typ může být libovolný datový typ kromě textu , ntext , obrázek , kurzor a časové razítko .
Funkce s tabulkovou hodnotou
Funkce s hodnotou tabulky (TVF) vracejí tabulku. Jejich návratový typ je tedy tabulka . Existují dva typy TVF:inline TVF a vícepříkazové TVF. Inline TVF nemá tělo funkce. Jeho návratová tabulka je výsledkem jediného SELECT prohlášení. Na druhé straně vícepříkazový TVF má funkční tělo. U vícepříkazových TVF specifikujete strukturu tabulky v návratové proměnné.

Můžete také vytvořit skalární a tabulkové funkce jako uživatelsky definované funkce CLR (Common Language Runtime).

Počínaje SQL Serverem 2005 (9.x) můžete psát uživatelem definované funkce v libovolném programovacím jazyce Microsoft .NET Framework, jako je Microsoft Visual Basic .NET nebo Microsoft Visual C#.


  1. Jak nastavit a přihlásit se jako uživatel root v MySQL

  2. ClusterControl:Úvod do nového monitoru dotazů

  3. Jak se mohu zbavit těchto komentářů ve výpisu MySQL?

  4. SQL TABULKA