Es gibt im Wesentlichen keinen Unterschied. Die Funktion hat lediglich die Einschränkung, dass sie nur eine Variable zurückgeben kann. Die gespeicherte Prozedur kann mehrere zurückgeben. Funktionen können in SQL eingebettet und in Select aufgerufen werden, gespeicherte Prozeduren jedoch nicht. Der Kern der Ausführung ist derselbe.
Es gibt viele Einschränkungen für Funktionen. Beispielsweise können keine temporären Tabellen verwendet werden, sondern nur Tabellenvariablen. Es gibt auch einige Funktionen, die nicht verfügbar sind usw. Es gibt relativ wenige Einschränkungen für gespeicherte Prozeduren
1. Im Allgemeinen sind die durch gespeicherte Prozeduren implementierten Funktionen komplexer, während die durch Funktionen implementierten Funktionen gezielter sind.
2. Für gespeicherte Prozeduren können Parameter zurückgegeben werden, während Funktionen nur Werte oder Tabellenobjekte zurückgeben können.
3. Gespeicherte Prozeduren werden im Allgemeinen als unabhängiger Teil ausgeführt (EXEC-Ausführung), während Funktionen als Teil einer Abfrageanweisung aufgerufen werden können (SELECT-Aufruf). Da die Funktion ein Tabellenobjekt zurückgeben kann, kann sie in verwendet werden Abfrage Es befindet sich nach dem FROM-Schlüsselwort in der Anweisung.
4. Wenn gespeicherte Prozeduren und Funktionen ausgeführt werden, ruft SQL Manager den Prozedurcache auf, um die entsprechende Abfrageanweisung abzurufen. Wenn im Prozedurcache keine entsprechende Abfrageanweisung vorhanden ist, führt SQL Manager die gespeicherten Prozeduren und Funktionen aus. Kompilieren.
Was im Prozedurcache gespeichert wird, ist der Ausführungsplan. Nach der Kompilierung wird der Ausführungsplan im Prozedurcache ausgeführt. Anschließend prüft SQL SERVER, ob dieser im Cache gespeichert werden soll, basierend auf der tatsächlichen Situation Das erste Kriterium für die Bewertung ist die Häufigkeit, mit der dieser Ausführungsplan verwendet werden darf. Das zweite Kriterium sind die Kosten für die Erstellung dieses Plans. Der im Cache gespeicherte Plan muss bei der nächsten Ausführung nicht kompiliert werden.