sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är en skalär UDF i SQL Server?

I SQL Server är en skalär UDF, eller skalär användardefinierad funktion, en användardefinierad funktion som returnerar ett enda värde.

Detta till skillnad från en tabellvärderad funktion, som returnerar en resultatuppsättning i form av en tabell.

Användardefinierade funktioner kan skrivas som antingen T-SQL UDF eller CLR (Common Language Runtime) UDF. CLR gör att du kan skapa UDF:er i hanterad kod med hjälp av vilket .NET Framework-programmeringsspråk som helst. Dessa funktioner är sedan tillgängliga för T-SQL eller annan hanterad kod.

Exempel 1 – Grundläggande skalär UDF

Här är ett exempel på koden som används för att skapa en grundläggande T-SQL-skalär UDF.

SKAPA FUNKTION dbo.ufn_discountPrice( @price DECIMAL(12,2), @rabatt DECIMAL(12,2) ) RETURER DECIMAL (12,2)SOM BÖRJAN RETUR @price * (1 - @rabatt);END; 

Denna skalära UDF accepterar två parametrar; @price och @discount . Dessa skickas in i funktionen som argument närhelst funktionen anropas. Funktionen tar värdet av dessa argument, utför en beräkning med dessa värden och returnerar sedan det resulterande värdet. I detta fall returneras det rabatterade priset.

Exempel 2 – Anropa UDF

När UDF har skapats kan den anropas inom T-SQL-kod när du behöver den.

Här är ett exempel på att anropa UDF:

VÄLJ dbo.ufn_discountPrice(100, .2) SOM Resultat;

Resultat

+----------+| Resultat ||--------|| 80,00 |+----------+

Du kan också använda skalära UDF:er i beräknade kolumner. Detta kan vara särskilt praktiskt om du behöver den beräknade kolumnen för att komma åt data i en annan tabell.

Funktionsalternativ

När du skapar en skalär UDF finns det olika alternativ som du kan tillämpa på funktionen.

Du kan till exempel ange om den ska vara schemabunden eller inte. Du kan ange att den ska vara krypterad. Du kan också ange en EXECUTE AS sats för att specificera säkerhetskontexten under vilken den användardefinierade funktionen exekveras.

Se Microsofts dokumentation för en detaljerad lista över alternativ som du kan tillhandahålla när du skapar eller ändrar en användardefinierad funktion.

Parameterdatatyp

För T-SQL-funktioner är alla datatyper, inklusive användardefinierade CLR-typer och användardefinierade tabelltyper, tillåtna utom tidsstämpel och den icke-skalära markören och tabell typer.

För CLR-funktioner är alla datatyper, inklusive CLR användardefinierade typer, tillåtna utom text , ntext , bild , användardefinierade tabelltyper, tidsstämpel datatyper och den icke-skalära markören och tabell typer.

Returdatatyp

Returdatatypen för T-SQL skalära UDF:er kan vara vilken datatyp som helst utom tidsstämpel och den icke-skalära markören och tabell typer.

CLR-funktioner kan använda vilken datatyp som helst förutom text , ntext , bild , tidsstämpel , och den icke-skalära markören och tabell typer.

Både T-SQL- och CLR-funktioner kan ha en CLR-användardefinierad typ för dess returvärde.


  1. Hur man formaterar siffror som valuta i MySQL

  2. Oändlig loop CTE med OPTION (maxrekursion 0)

  3. Minnes-/lagringsteknikhierarki och SQL Server

  4. Hur återanvänder man resultatet för SELECT-, WHERE- och ORDER BY-klausuler?