Neuerstellen von gespeicherten Prozeduren als Funktionen

Unter diesem Thema wird beschrieben, wie Sie bestimmen, ob die Logik vorhandener gespeicherter Prozeduren in Form benutzerdefinierter Funktionen neu geschrieben werden sollte. Wenn Sie z. B. eine gespeicherte Prozedur direkt von einer Abfrage aufrufen möchten, erstellen Sie den Code als benutzerdefinierte Funktion neu.

Wenn die gespeicherte Prozedur ein einziges Resultset zurückgibt, sollten Sie im Allgemeinen eine Funktion mit Tabellenrückgabe definieren. Definieren Sie eine Skalarfunktion, falls die gespeicherte Prozedur einen Skalarwert berechnet.

Kriterien für Funktionen mit Tabellenrückgabe

Wenn eine gespeicherte Prozedur die folgenden Kriterien erfüllt, empfiehlt es sich, sie als Funktion mit Tabellenrückgabe neu zu erstellen:

  • Die Logik kann in einer einzigen SELECT-Anweisung umgesetzt werden, ist jedoch keine Sicht, sondern eine gespeicherte Prozedur, weil Parameter benötigt werden. In diesem Fall kann eine Inlinefunktion mit Tabellenrückgabe verwendet werden.

  • Die gespeicherte Prozedur führt keine Aktualisierungsvorgänge aus, außer für Tabellenvariablen.

  • Dynamische EXECUTE-Anweisungen sind nicht erforderlich.

  • Die gespeicherte Prozedur gibt ein einziges Resultset zurück.

  • Die wichtigste Aufgabe der gespeicherten Prozedur besteht darin, Zwischenergebnisse zu erstellen, die in eine temporäre Tabelle geladen werden sollen, die dann in einer SELECT-Anweisung abgefragt wird. INSERT...EXEC-Anweisungen können mithilfe von Funktionen mit Tabellenrückgabe erstellt werden. Betrachten Sie z. B. folgendes Szenario:

    INSERT #temp EXEC sp_getresults
    SELECT ...
    FROM #temp, t1
    WHERE ...
    

    Die gespeicherte Prozedur sp_getresults kann als Funktion mit Tabellenrückgabe neu erstellt werden, z. B. fn_results(). Dies bedeutet, dass die vorherige Anweisung folgendermaßen umgeschrieben werden kann:

    INSERT #temp
    SELECT ...
    FROM fn_results(), t1
    WHERE ...
    

Umschreiben erweiterter gespeicherter Prozeduren mit CLR

CLR-Funktionen bieten eine zuverlässigere und skalierbarere Alternative zu erweiterten gespeicherten Prozeduren. Viele erweiterte gespeicherte Prozeduren führen eine Berechnungsaufgabe aus, die in Transact-SQL schwieriger auszudrücken ist. Solche gespeicherten Prozeduren können angesichts der oben beschriebenen Vorteile mit CLR umgeschrieben werden. Außerdem können erweiterte gespeicherte Prozeduren, die Resultsets durch Zugriff auf eine externe Ressource (z. B. eine Datei oder einen Webdienst) zurückgeben, mithilfe einer auf Tabellenwerten basierenden CLR-Funktion umgeschrieben werden. Weitere Informationen finden Sie unter Erstellen von CLR-Funktionen.