Verzögerte Namensauflösung und Kompilierung
Wenn eine gespeicherte Prozedur erstellt wird, werden die Anweisungen in der Prozedur im Hinblick auf ihre syntaktische Richtigkeit analysiert. Wird in der Prozedurdefinition ein syntaktischer Fehler entdeckt, wird ein Fehler zurückgegeben, und die gespeicherte Prozedur wird nicht erstellt. Wenn die Anweisungen syntaktisch richtig sind, wird der Text der gespeicherten Prozedur in der sys.sql_modules-Katalogsicht gespeichert.
Wenn eine gespeicherte Prozedur das erste Mal ausgeführt wird, wird der Text der gespeicherten Prozedur vom Abfrageprozessor aus der sys.sql_modules-Katalogsicht der Prozedur gelesen, und es wird geprüft, ob die Namen der von der Prozedur verwendeten Objekte vorhanden sind. Dieser Vorgang wird als verzögerte Namensauflösung bezeichnet, da die Tabellenobjekte, auf die von der gespeicherten Prozedur verwiesen wird, beim Erstellen der Prozedur nicht vorhanden sein müssen; sie müssen nur vorhanden sein, wenn die Prozedur ausgeführt wird.
Hinweis |
---|
Verzögerte Namensauflösung kann nur verwendet werden, wenn Sie auf nicht vorhandene Tabellenobjekte verweisen. Alle anderen Objekte müssen zu dem Zeitpunkt vorhanden sein, an dem die gespeicherte Prozedur erstellt wird. Wenn Sie z. B. auf eine vorhandene Tabelle in einer gespeicherten Prozedur verweisen, können Sie keine nicht vorhandenen Spalten für die betreffende Tabelle auflisten. |
In der Auflösungsphase führt MicrosoftSQL Server noch weitere Überprüfungsaktivitäten durch (z. B. Überprüfen der Kompatibilität eines Spaltendatentyps mit Variablen).Wenn die Objekte, auf die von der gespeicherten Prozedur verwiesen wird, bei Ausführung der gespeicherten Prozedur nicht vorhanden sind, wird die Ausführung der gespeicherten Prozedur beendet, wenn die Anweisung, die auf das fehlende Objekt verweist, erreicht wird. In diesem Fall, oder wenn während der Namensauflösung andere Fehler entdeckt werden, wird ein Fehler zurückgegeben.
Hinweis |
---|
Wird ein Objekt, auf das von einer gespeicherten Prozedur verwiesen wird, gelöscht oder umbenannt, wird ein Fehler zurückgegeben, sobald die Prozedur ausgeführt wird. Wird jedoch ein Objekt, auf das in einer gespeicherten Prozedur verwiesen wird, durch ein Objekt mit demselben Namen ersetzt, wird die gespeicherte Prozedur ausgeführt, ohne dass sie neu erstellt werden muss. Wenn z. B. mit der gespeicherten Prozedur Proc1 auf die Test1-Tabelle verwiesen wird, und Test1 gelöscht und eine andere Tabelle mit dem Namen Test1 erstellt wird, wird mit Proc1 nun auf die neue Tabelle verwiesen. Die gespeicherte Prozedur muss nicht neu erstellt werden. |
Wenn die Auflösungsphase bei der Prozedurausführung erfolgreich durchlaufen wurde, analysiert der MicrosoftSQL Server-Abfrageoptimierer die Transact-SQL-Anweisungen in der gespeicherten Prozedur und erstellt einen Ausführungsplan. In dem Ausführungsplan wird die schnellste Methode zur Ausführung der gespeicherten Prozedur beschrieben. Diese Bewertung erfolgt u. a. anhand der folgenden Informationen:
Umfang der Daten in den Tabellen.
Art und Vorhandensein von Indizes für die Tabellen und die Verteilung der Daten in den indizierten Spalten.
Vergleichsoperatoren und Vergleichswerte, die in Bedingungen von WHERE-Klauseln verwendet werden.
Vorhandensein von Verknüpfungen und der Schlüsselwörter UNION, GROUP BY und ORDER BY.
Nachdem der Abfrageoptimierer diese Faktoren in der gespeicherten Prozedur analysiert hat, platziert er den Ausführungsplan im Arbeitsspeicher. Der Vorgang des Analysierens der gespeicherten Prozedur und Erstellens eines Ausführungsplanes wird als Kompilierung bezeichnet. Der optimierte Ausführungsplan im Arbeitsspeicher wird zur Ausführung der Abfrage verwendet. Der Ausführungsplan verbleibt im Arbeitsspeicher, bis SQL Server neu gestartet wird oder bis Speicherplatz für die Speicherung eines anderen Objekts benötigt wird.
Wenn die gespeicherte Prozedur wiederholt ausgeführt wird, verwendet SQL Server den vorhandenen Ausführungsplan erneut, wenn sich dieser noch im Arbeitsspeicher befindet. Befindet sich der Ausführungsplan nicht mehr im Arbeitsspeicher, wird ein neuer Ausführungsplan erstellt.
Siehe auch