Inline oder Multi-Statement? Wie beschreibt MSDN sie?
Gbn
Antworten:
205
Es gibt zwei Arten von Tabellenwertfunktionen. Eine, die nur eine select-Anweisung ist und eine, die mehr Zeilen als nur eine select-Anweisung enthalten kann.
Das erste Beispiel wird als „Inline - Tabellenwertfunktion“ bekannt , die Vorteile Leistung im Vergleich zu einer Multi-Statement - Tabellenwertfunktion, nämlich der Datenbankserver kann recompose die Abfrage mit dem ITVF inlined in die übergeordneten Abfrage, immer im Wesentlichen eines parametrisierte VIEWWährend sich ein MSTVF eher wie eine undurchsichtige gespeicherte Prozedur verhält (allerdings mit seinen eigenen Vorteilen im Vergleich zu Sprocs). Inline-Funktionen sollten MSTVF vorgezogen werden. Wenn Sie Zwischenwerte berechnen und speichern müssen (z. B. das Ergebnis eines komplexen Skalarfunktionsausdrucks), verwenden Sie eine Unterabfrage.
Dai
1
Es ist wahrscheinlich auch erwähnenswert, dass Sie in Betracht ziehen könnten, eine separate Funktion zu schreiben, um das zu generieren, wenn das Ergebnis dessen, was Sie zum Auffüllen der Variablen verwenden, die Sie festlegen möchten, in irgendeiner Weise verallgemeinerbar ist. Auf diese Weise können Sie die oben von @Dai beschriebene ITVF mit allen Vorteilen verwenden und gleichzeitig einen dynamisch generierten Wert in Ihre Funktion einfügen. Ich habe gerade eine Funktion mit Hilfe der obigen Lösung geschrieben (danke @MikaelEriksson!), Die einen ihrer Parameter an eine Hilfsfunktion weitergibt, damit ich das MSTVF-Formular nicht verwenden muss.
Naughtilus
1
Die größten Kosten sind das Einfügen für meine Funktion und ich weiß nicht, wie ich diese Kosten überspringen kann, ohne sie in die Tabellenvariable
einzufügen
@naughtilus es wäre toll, ein Beispiel dafür zu sehen. Haben Sie darüber nachgedacht, zusammen mit Ihrem Vorschlag eine weitere Antwort zu geben?
Antworten:
Es gibt zwei Arten von Tabellenwertfunktionen. Eine, die nur eine select-Anweisung ist und eine, die mehr Zeilen als nur eine select-Anweisung enthalten kann.
Dies kann keine Variable haben:
Sie müssen stattdessen Folgendes tun:
quelle
VIEW
Während sich ein MSTVF eher wie eine undurchsichtige gespeicherte Prozedur verhält (allerdings mit seinen eigenen Vorteilen im Vergleich zu Sprocs). Inline-Funktionen sollten MSTVF vorgezogen werden. Wenn Sie Zwischenwerte berechnen und speichern müssen (z. B. das Ergebnis eines komplexen Skalarfunktionsausdrucks), verwenden Sie eine Unterabfrage.