@@NESTLEVEL (Transact-SQL)
Gibt die Schachtelungsebene der aktuellen Ausführung einer gespeicherten Prozedur auf dem lokalen Server zurück (anfangs 0). Informationen zu Schachtelungsebenen finden Sie unter Schachteln gespeicherter Prozeduren.
Syntax
@@NESTLEVEL
Rückgabetypen
int
Hinweise
Jedes Mal, wenn eine gespeicherte Prozedur eine andere gespeicherte Prozedur aufruft oder durch Verweis auf eine Common Language Routine (CLR), einen Typ oder ein Aggregat verwalteten Code ausführt, wird die Schachtelungsebene erhöht. Wird der Höchstwert von 32 überschritten, so wird die Transaktion beendet.
Wenn @@NESTLEVEL innerhalb einer Transact-SQL-Zeichenfolge ausgeführt wird, entspricht der zurückgegebene Wert 1 + der aktuellen Schachtelungsebene. Wenn @@NESTLEVEL mithilfe von sp_executesql dynamisch ausgeführt wird, entspricht der zurückgegebene Wert 2 + der aktuellen Schachtelungsebene.
Beispiele
A. Verwenden von @@NESTLEVEL in einer Prozedur
Dieses Beispiel erstellt zwei Prozeduren: Eine, die eine andere Prozedur aufruft, und eine, die die @@NESTLEVEL-Einstellung beider Prozeduren anzeigt.
USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'usp_OuterProc', N'P')IS NOT NULL
DROP PROCEDURE usp_OuterProc;
GO
IF OBJECT_ID (N'usp_InnerProc', N'P')IS NOT NULL
DROP PROCEDURE usp_InnerProc;
GO
CREATE PROCEDURE usp_InnerProc AS
SELECT @@NESTLEVEL AS 'Inner Level';
GO
CREATE PROCEDURE usp_OuterProc AS
SELECT @@NESTLEVEL AS 'Outer Level';
EXEC usp_InnerProc;
GO
EXECUTE usp_OuterProc;
GO
Dies ist das Resultset.
Outer Level
-----------
1
Inner Level
-----------
2
B. Aufrufen von @@NESTLEVEL
Das folgende Beispiel zeigt die unterschiedlichen Werte, die von SELECT, EXEC und sp_executesql zurückgegeben werden, wenn beide jeweils @@NESTLEVEL aufrufen.
CREATE PROC usp_NestLevelValues AS
SELECT @@NESTLEVEL AS 'Current Nest Level';
EXEC ('SELECT @@NESTLEVEL AS OneGreater');
EXEC sp_executesql N'SELECT @@NESTLEVEL as TwoGreater' ;
GO
EXEC usp_NestLevelValues;
GO
Dies ist das Resultset.
Current Nest Level
------------------
1
(1 row(s) affected)
OneGreater
-----------
2
(1 row(s) affected)
TwoGreater
-----------
3
(1 row(s) affected)
Siehe auch