@@NESTLEVEL (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure 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
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)