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, nur Tabellenvariablen sind nicht verfügbar usw. Die Einschränkungen für gespeicherte Prozeduren sind relativ gering > 1. Im Allgemeinen sind die durch gespeicherte Prozeduren implementierten Funktionen komplexer, während die durch Funktionen implementierten Funktionen gezielter sind.
2. Gespeicherte Prozeduren können Parameter zurückgeben, während Funktionen nur Werte oder Tabellenobjekte zurückgeben können.
3. Gespeicherte Prozeduren werden im Allgemeinen als unabhängiger Teil ausgeführt, während Funktionen als Teil einer Abfrageanweisung aufgerufen werden können. Da die Funktion ein Tabellenobjekt zurückgeben kann, kann es sich im FROM-Schlüssel in der Abfrage befinden Aussage hinter den Worten.
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, ruft SQL Manager die gespeicherte Prozedur ab und Funktionen werden kompiliert.
Was im Prozedurcache gespeichert wird, ist der Ausführungsplan, der im Prozedurcache kompiliert wird. Danach prüft SQL SERVER, ob er dem Cache hinzugefügt werden soll Die tatsächliche Situation jedes Ausführungsplans ist das erste Kriterium, mit der dieser Ausführungsplan verwendet werden kann, und das zweite sind die Kosten für die Erstellung dieses Plans. Der im Cache gespeicherte Plan muss bei der nächsten Ausführung nicht kompiliert werden.
Der spezifische Unterschied zwischen gespeicherten Prozeduren und benutzerdefinierten Funktionen
Schauen wir uns zunächst die Definition an:
Gespeicherte Prozeduren
Gespeicherte Prozeduren können die Datenbankverwaltung ermöglichen , und es ist viel einfacher, Informationen über die Datenbank und ihre Benutzer anzuzeigen. Eine gespeicherte Prozedur ist eine vorkompilierte Sammlung von SQL-Anweisungen und optionalen Kontrollflussanweisungen, die unter einem Namen gespeichert und als Einheit verarbeitet werden. Gespeicherte Prozeduren werden in der Datenbank gespeichert und können von der Anwendung über einen Aufruf ausgeführt werden. Sie ermöglichen Benutzern die Deklaration von Variablen, die bedingte Ausführung und andere leistungsstarke Programmierfunktionen.
Gespeicherte Prozeduren können Programmablauf, Logik und Abfragen an die Datenbank enthalten. Sie können Parameter akzeptieren, Parameter ausgeben, einzelne oder mehrere Ergebnismengen zurückgeben und Werte zurückgeben.
Gespeicherte Prozeduren können für jeden Zweck der Verwendung von SQL-Anweisungen verwendet werden und haben die folgenden Vorteile:
Eine Reihe von SQL-Anweisungen kann in einer einzigen gespeicherten Prozedur ausgeführt werden.
Sie können in Ihren eigenen gespeicherten Prozeduren auf andere gespeicherte Prozeduren verweisen, was eine Reihe komplexer Anweisungen vereinfachen kann.
Gespeicherte Prozeduren werden bei ihrer Erstellung auf dem Server kompiliert, sodass sie schneller ausgeführt werden als eine einzelne SQL-Anweisung.
Benutzerdefinierte Funktionen
Eine Funktion ist eine Unterroutine, die aus einer oder mehreren Transact-SQL-Anweisungen besteht und zum Kapseln von Code zur Wiederverwendung verwendet werden kann. Microsoft® SQL Server® 2000 beschränkt Benutzer nicht auf die integrierten Funktionen, die als Teil der Transact-SQL-Sprache definiert sind, sondern ermöglicht Benutzern stattdessen die Erstellung eigener benutzerdefinierter Funktionen.
Benutzerdefinierte Funktionen können mit der CREATE FUNCTION-Anweisung erstellt, mit der ALTER FUNCTION-Anweisung geändert und mit der DROP FUNCTION-Anweisung entfernt werden. Jeder vollständig zulässige benutzerdefinierte Funktionsname (Datenbankname.Eigentümername.Funktionsname) muss eindeutig sein.
Muss über die Berechtigung CREATE FUNCTION verfügen, um benutzerdefinierte Funktionen zu erstellen, zu ändern oder zu entfernen. Bevor ein Benutzer, der nicht der Eigentümer ist, eine Funktion in einer Transact-SQL-Anweisung verwenden kann, müssen dem Benutzer die entsprechenden Berechtigungen für die Funktion erteilt werden. Um eine Tabelle zu erstellen oder zu ändern, die auf eine benutzerdefinierte Funktion in einer CHECK-Einschränkung, einer DEFAULT-Klausel oder einer berechneten Spaltendefinition verweist, müssen Sie außerdem über die REFERENCES-Berechtigung für die Funktion verfügen.