@@NESTLEVEL (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Retourne le niveau d'imbrication de la procédure stockée en cours d'exécution (initialement 0) sur le serveur local.

Conventions de la syntaxe Transact-SQL

Syntaxe

@@NESTLEVEL  

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

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

R. 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 AdventureWorks2022;  
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 le jeu de résultats obtenu.

Outer Level  
-----------  
1  
 
Inner Level  
-----------  
2

B. Appel de @@NESTLEVEL

L’exemple suivant montre la différence entre les valeurs renvoyé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 le jeu de résultats obtenu.

Current Nest Level  
------------------  
1  
 
(1 row(s) affected)  
 
OneGreater  
-----------  
2  
 
(1 row(s) affected)  
 
TwoGreater  
-----------  
3  
 
(1 row(s) affected)

Voir aussi

Fonctions de configuration (Transact-SQL)
Créer une procédure stockée
@@TRANCOUNT (Transact-SQL)