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

SQL Server:Tabellenwertfunktionen vs. gespeicherte Prozeduren

Eine Inline-Tabellenwertfunktion (TVF) ist wie ein Makro:Sie wird in die äußere Abfrage erweitert. Es hat als solches keinen Plan:Das aufrufende SQL hat einen Plan.

Ein Multi-Statement-TVF hat einen Plan (wird eine Referenz finden).

TVFs sind nützlich, wenn Sie die SELECT-Liste für einen parametrisierten Eingang variieren möchten. Inline-TVFs werden erweitert und die äußere Auswahl/wo wird vom Optimierer berücksichtigt. Für TVFs mit mehreren Anweisungen ist eine Optimierung nicht wirklich möglich, da sie dann vollständig ausgeführt werden muss filtern.

Persönlich würde ich eine gespeicherte Prozedur über ein TVF mit mehreren Anweisungen verwenden. Sie sind flexibler (z. B. Hinweise, können Status ändern, SET NOCOUNT ON, SET XACTABORT usw.).

Ich habe keine Einwände gegen Inline-TVFs, aber ich neige nicht dazu, sie für Client-seitigen Code zu verwenden, da es nicht möglich ist, SET zu verwenden und den Status zu ändern.