Ausführen von benutzerdefinierten Funktionen
Gilt für: SQL Server Azure SQL-Datenbank
Ausführen einer benutzerdefinierten Funktion mit Transact-SQL
Skalarfunktionen müssen mindestens mit dem zweiteiligen Namen der Funktion (<schema>.<function>
) aufgerufen werden. Weitere Informationen finden Sie unter CREATE FUNCTION (Transact-SQL).
Begrenzungen
In Transact-SQL können Parameter entweder mit <value>
oder mit @parameter_name = <value>
angegeben werden. Ein Parameter ist nicht Teil einer Transaktion. Deshalb wird der Wert eines Parameters, der in einer Transaktion geändert wird, nicht wieder auf seinen ursprünglichen Wert zurückgesetzt, wenn für diese Transaktion später ein Rollback ausgeführt wird. Der Wert, der an den Aufrufer zurückgegeben wird, ist immer der Wert zu dem Zeitpunkt, zu dem das Modul beendet wird.
Berechtigungen
Zum Ausführen der EXECUTE-Anweisung sind keine Berechtigungen erforderlich. Es sind jedoch Berechtigungen für die sicherungsfähigen Elemente in der EXECUTE
-Zeichenfolge erforderlich. Wenn z. B. die Zeichenfolge eine INSERT-Anweisung enthält, benötigt der Aufrufer der EXECUTE
-Anweisung die INSERT
-Berechtigung für die Zieltabelle. Berechtigungen werden überprüft, wenn die EXECUTE
-Anweisung erreicht wird, selbst wenn die EXECUTE
-Anweisung innerhalb eines Moduls enthalten ist. Weitere Informationen finden Sie unter EXECUTE.
Verwenden von Transact-SQL
Dieses Beispiel verwendet die Skalarwertfunktion ufnGetSalesOrderStatusText
, die in den meisten Editionen von AdventureWorks2022
verfügbar ist. Der Zweck der Funktion ist einen Textwert für den Verkaufsstatus von einer ganzen Zahl zurückzugeben. Verändern Sie das Beispiel, indem Sie ganze Zahlen von 1 bis 7 an den @Status
-Parameter übergeben.
USE [AdventureWorks2022]
GO
-- Declare a variable to return the results of the function.
DECLARE @ret NVARCHAR(15);
-- Execute the function while passing a value to the @status parameter
EXEC @ret = dbo.ufnGetSalesOrderStatusText @Status = 5;
-- View the returned value.
-- The Execute and Select statements must be executed at the same time.
SELECT N'Order Status: ' + @ret;
Dies ist das Ergebnis.
Order Status: Shipped