Freigeben über


Schachteln gespeicherter Prozeduren

Gespeicherte Prozeduren sind geschachtelt, wenn eine gespeicherte Prozedur eine andere gespeicherte Prozedur aufruft oder verwalteten Code durch Verweisen auf eine CLR-Routine, einen -Typ oder ein -Aggregat ausführt. Sie können gespeicherte Prozeduren und Verweise auf verwalteten Code bis auf 32 Ebenen schachteln. Die Schachtelungsebene wird um eine Ebene erhöht, wenn die aufgerufene gespeicherte Prozedur oder der Verweis auf verwalteten Code die Ausführung beginnt, und um eine Ebene verringert, wenn die aufgerufene gespeicherte Prozedur oder der Verweis auf verwalteten Code die Ausführung beendet. Der Versuch, die Anzahl der maximal 32 Schachtelungsebenen zu überschreiten, führt dazu, dass die gesamte Kette einen Fehler erzeugt. Die aktuelle Schachtelungsebene für die zurzeit ausgeführte gespeicherte Prozedur wird in der @@NESTLEVEL-Funktion gespeichert.

HinweisHinweis

Alle Verweise auf verwalteten Code aus einer gespeicherten Prozedur von Transact-SQL zählen als eine Ebene hinsichtlich der Schachtelungsgrenze von 32 Ebenen. Methoden, die aus verwaltetem Code aufgerufen werden, werden nicht mitgezählt.

Wenn eine gespeicherte Prozedur verwalteten Code durch Verweisen auf eine CLR-Routine, einen -Typ oder ein -Aggregat ausführt, zählt dieser Verweis ebenfalls als eine Schachtelungsebene. Methoden, die aus verwaltetem Code aufgerufen werden, werden nicht mitgezählt. Die aktuelle Schachtelungsebene wird von der @@NESTLEVEL-Funktion zurückgegeben. Wenn eine CLR-gespeicherte Prozedur Datenzugriffsvorgänge über den von MicrosoftSQL Server verwalteten Anbieter ausführt, werden zusätzliche Schachtelungsebenen im Übergang aus verwaltetem Code in SQL ebenfalls hinzugefügt; diese Eben spiegelt sich in der @@NESTLEVEL-Funktion wieder.

Ein Fehler in einer geschachtelten gespeicherten Prozedur führt nicht notwendigerweise zum Fehlschlagen der aufrufenden gespeicherten Prozedur. Wenn gespeicherte Prozeduren innerhalb von gespeicherten Prozeduren aufgerufen werden, verwenden Sie die RETURN-Anweisung von Transact-SQL, um einen Rückgabecode zurückzugeben, und überprüfen Sie den Rückgabecode von der aufrufenden gespeicherten Prozedur aus. Auf diese Weise können Sie angeben, wie sich die gespeicherte Prozedur verhalten soll, falls ein Fehler auftritt. Weitere Informationen zum Verwenden von Rückgabecodes finden Sie unter Zurückgeben von Daten mithilfe eines Rückgabecodes.

Gespeicherte Prozeduren können sogar sich selbst in einem geschachtelten Aufruf aufrufen, eine Technik, die als Rekursion bezeichnet wird.

Obwohl die Schachtelungstiefe auf 32 Ebenen begrenzt ist, gibt es in SQL Server keine Beschränkung für die Anzahl der gespeicherten Prozeduren, die von einer bestimmten gespeicherten Prozedur aufgerufen werden können. Dies gilt unter der Voraussetzung, dass die untergeordneten gespeicherten Prozeduren nicht andere untergeordnete gespeicherte Prozeduren aufrufen und die maximale Anzahl von Schachtelungsebenen niemals überschritten wird.