Grundlagen zu benutzerdefinierten Funktionen

Ebenso wie Funktionen in Programmiersprachen sind auch benutzerdefinierte Funktionen von Microsoft SQL Server Routinen, die Parameter annehmen, eine Aktion ausführen (z. B. eine komplexe Berechnung) und das Ergebnis dieser Aktion als Wert zurückgeben können. Der Rückgabewert kann ein einzelner Skalarwert oder ein Resultset sein.

Vorteile von benutzerdefinierten Funktionen

Benutzerdefinierte Funktionen bieten in SQL Server die folgenden Vorteile:

  • Modulare Programmierung.

    Sie können die Funktion einmal erstellen, sie dann in der Datenbank speichern und beliebig oft in einem Programm aufrufen. Benutzerdefinierte Funktionen können unabhängig vom Programmquellcode geändert werden.

  • Schnellere Ausführung.

    Ähnlich wie gespeicherte Prozeduren verringern auch benutzerdefinierte Funktionen von Transact-SQL die Kompilierungskosten von Transact-SQL-Code, da die Pläne zwischengespeichert und für wiederholte Ausführungen erneut verwendet werden. Dies bedeutet, dass die benutzerdefinierte Funktion nicht für jede Verwendung neu analysiert und optimiert werden muss; aus diesem Umstand ergeben sich wesentlich schnellere Ausführungszeiten.

    CLR-Funktionen bieten gegenüber Transact-SQL-Funktionen für Berechnungsaufgaben, Zeichenfolgebearbeitung und Geschäftslogik erhebliche Leistungsvorteile. Transact-SQL-Funktionen sind besser für datenzugriffsintensive Programmlogik geeignet.

  • Reduzierung der Netzwerkverkehrs.

    Eine Operation, die Daten basierend auf einer komplexen Einschränkung filtert, die nicht als einzelner Skalarausdruck ausgedrückt werden kann, kann als Funktion definiert werden. Diese Funktion kann anschließend in der WHERE-Klausel aufgerufen werden, um die Anzahl der Zeilen zu verringern, die an den Client gesendet werden.

HinweisHinweis

Benutzerdefinierte Transact-SQL-Funktionen in Abfragen können nur auf einem einzelnen Thread (serieller Ausführungsplan) ausgeführt werden.

Komponenten einer benutzerdefinierten Funktion

Benutzerdefinierte Funktionen können in Transact-SQL oder einer anderen .NET-Programmiersprache geschrieben werden. Weitere Informationen zu den .NET-Sprachen in Funktionen finden Sie unter CLR-benutzerdefinierte Funktionen.

Alle benutzerdefinierten Funktionen weisen die gleiche zweiteilige Struktur auf: einen Header und einen Hauptteil. Die Funktion nimmt null oder mehr Eingabeparameter an und gibt einen Skalarwert oder eine Tabelle zurück.

Der Header definiert Folgendes:

  • Den Funktionsnamen mit optionalem Schema/Besitzernamen.

  • Den Eingabeparameternamen und den Datentyp.

  • Optionen, die für den Eingabeparameter gelten.

  • Den Datentyp des Rückgabeparameters und optional den Namen.

  • Optionen, die für den Rückgabeparameter gelten.

Der Hauptteil definiert die Aktion, oder Logik, die die Funktion ausführen soll. Er enthält eines der folgenden Elemente:

  • Eine oder mehrere Transact-SQL-Anweisungen, die die Funktionslogik ausführen.

  • Einen Verweis auf eine .NET-Assembly.

Das folgende Beispiel zeigt eine einfache benutzerdefinierte Transact-SQL-Funktion und erläutert die wesentlichen Komponenten der Funktion. Die Funktion wertet ein bereitgestelltes Datum aus und gibt einen Wert zurück, der die Position dieses Datums in einer Woche angibt.

IF OBJECT_ID(N'dbo.GetWeekDay', N'FN') IS NOT NULL
    DROP FUNCTION dbo.GetWeekDay;
GO
CREATE FUNCTION dbo.GetWeekDay           -- function name
(@Date datetime)                     -- input parameter name and data type
RETURNS int                          -- return parameter data type
AS
BEGIN                                -- begin body definition
RETURN DATEPART (weekday, @Date)     -- action performed
END;
GO

Das folgende Beispiel zeigt die Funktion, die in einer Transact-SQL-Anweisung verwendet wird.

SELECT dbo.GetWeekDay(CONVERT(DATETIME,'20020201',101)) AS DayOfWeek;
GO

Dies ist das Resultset.

DayOfWeek
---------
6  
(1 row(s) affected)

Siehe auch

Konzepte

Andere Ressourcen