Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist eine skalare UDF in SQL Server?

In SQL Server ist eine skalare UDF oder skalare benutzerdefinierte Funktion eine benutzerdefinierte Funktion, die einen einzelnen Wert zurückgibt.

Dies steht im Gegensatz zu einer Tabellenwertfunktion, die eine Ergebnismenge in Form einer Tabelle zurückgibt.

Benutzerdefinierte Funktionen können entweder als T-SQL-UDFs oder CLR-UDFs (Common Language Runtime) geschrieben werden. Mit CLR können Sie UDFs in verwaltetem Code mit einer beliebigen .NET Framework-Programmiersprache erstellen. Diese Funktionen sind dann für T-SQL oder anderen verwalteten Code zugänglich.

Beispiel 1 – Einfache skalare UDF

Hier ist ein Beispiel für den Code, der zum Erstellen einer einfachen skalaren UDF für T-SQL verwendet wird.

CREATE FUNCTION dbo.ufn_discountPrice( @price DECIMAL(12,2), @discount DECIMAL(12,2) ) RETURNS DECIMAL (12,2)ASBEGIN RETURN @price * (1 - @discount);END; 

Diese skalare UDF akzeptiert zwei Parameter; @price und @discount . Diese werden der Funktion als Argumente übergeben, wenn die Funktion aufgerufen wird. Die Funktion nimmt den Wert dieser Argumente, führt eine Berechnung mit diesen Werten durch und gibt dann den resultierenden Wert zurück. In diesem Fall wird der ermäßigte Preis zurückgegeben.

Beispiel 2 – UDF aufrufen

Sobald die UDF erstellt wurde, kann sie jederzeit innerhalb des T-SQL-Codes aufgerufen werden, wenn Sie sie benötigen.

Hier ist ein Beispiel für den Aufruf der UDF:

SELECT dbo.ufn_discountPrice(100, .2) AS Ergebnis;

Ergebnis

+----------+| Ergebnis ||----------|| 80,00 |+----------+

Sie können auch skalare UDFs in berechneten Spalten verwenden. Dies kann besonders praktisch sein, wenn Sie die berechnete Spalte benötigen, um auf Daten in einer anderen Tabelle zuzugreifen.

Funktionsoptionen

Wenn Sie eine skalare UDF erstellen, gibt es verschiedene Optionen, die Sie auf die Funktion anwenden können.

Sie können beispielsweise angeben, ob es schemagebunden sein soll oder nicht. Sie können angeben, dass es verschlüsselt werden soll. Sie können auch ein EXECUTE AS angeben -Klausel, um den Sicherheitskontext anzugeben, in dem die benutzerdefinierte Funktion ausgeführt wird.

Eine detaillierte Liste der Optionen, die Sie beim Erstellen oder Ändern einer benutzerdefinierten Funktion bereitstellen können, finden Sie in der Microsoft-Dokumentation.

Parameterdatentyp

Für T-SQL-Funktionen sind alle Datentypen, einschließlich benutzerdefinierter CLR-Typen und benutzerdefinierter Tabellentypen, außer timestamp zulässig und der nichtskalare Cursor und Tabelle Typen.

Für CLR-Funktionen sind alle Datentypen, einschließlich benutzerdefinierter CLR-Typen, außer Text zulässig , ntext , Bild , benutzerdefinierte Tabellentypen, Zeitstempel Datentypen und den nichtskalaren Cursor und Tabelle Typen.

Datentyp zurückgeben

Der Rückgabedatentyp für skalare T-SQL-UDFs kann jeder Datentyp außer timestamp sein und der nichtskalare Cursor und Tabelle Typen.

CLR-Funktionen können jeden Datentyp außer Text verwenden , ntext , Bild , Zeitstempel , und den nichtskalaren Cursor und Tabelle Typen.

Sowohl T-SQL- als auch CLR-Funktionen können einen benutzerdefinierten CLR-Typ für ihren Rückgabewert haben.