@@NESTLEVEL (Transact-SQL)

Retourne le niveau d'imbrication de la procédure stockée en cours d'exécution (initialement 0) sur le serveur local. Pour plus d'informations sur les niveaux d'imbrication, consultez Imbrication de procédures stockées.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

@@NESTLEVEL

Types de retour

int

Notes

Chaque fois qu'une procédure stockée appelle une autre procédure stockée ou exécute du code managé en référençant une agrégation, un type ou une routine CLR (Common Language Runtime), le niveau d'imbrication est incrémenté. En cas de dépassement du maximum autorisé (32), la transaction s'arrête.

Lorsque @@NESTLEVEL est exécuté dans une chaîne Transact-SQL, la valeur renvoyée est 1, augmentée du niveau d'imbrication actuel. Lorsque @@NESTLEVEL est exécuté dynamiquement à l'aide de sp_executesql, la valeur renvoyée est 2, augmentée du niveau d'imbrication actuel.

Exemples

A. Utilisation de @@NESTLEVEL dans une procédure

L'exemple suivant crée deux procédures : une qui appelle l'autre et une qui affiche le paramètre @@NESTLEVEL de chacune d'entre elles.

USE AdventureWorks;
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

Voici l'ensemble des résultats.

Outer Level
-----------
1          

Inner Level
-----------
2

B. Appel de @@NESTLEVEL

L'exemple suivant montre la différence des valeurs retournées par les commandes SELECT, EXEC et sp_executesql lorsque chacune d'elles appelle @@NESTLEVEL.

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

Voici l'ensemble des résultats.

Current Nest Level 
------------------ 
1

(1 row(s) affected)

OneGreater  
----------- 
2

(1 row(s) affected)

TwoGreater  
----------- 
3

(1 row(s) affected)