@@NESTLEVEL (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Devuelve el nivel de anidamiento de la ejecución del procedimiento almacenado actual (inicialmente 0) en el servidor local.

Convenciones de sintaxis de Transact-SQL

Sintaxis

@@NESTLEVEL  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Tipos de valor devuelto

int

Observaciones

Cada vez que un procedimiento almacenado llama a otro procedimiento almacenado o ejecuta un código administrado haciendo referencia a una rutina Common Language Runtime (CLR), un tipo o un agregado, se incrementa el nivel de anidamiento. Cuando se sobrepasa el máximo de 32, se termina la transacción.

Cuando se ejecuta @@NESTLEVEL en una cadena de Transact-SQL, el valor devuelto es 1 + el nivel de anidamiento actual. Cuando se ejecuta @@NESTLEVEL de forma dinámica con sp_executesql, el valor devuelto es 2 + el nivel de anidamiento actual.

Ejemplos

A. Usar @@NESTLEVEL en un procedimiento

En el ejemplo siguiente se crean dos procedimientos: uno que llama al otro y uno que muestra el valor @@NESTLEVEL de cada uno.

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  

El conjunto de resultados es el siguiente:

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

B. Llamar a @@NESTLEVEL

En el siguiente ejemplo se muestra la diferencia en los valores devueltos por SELECT, EXEC y sp_executesql cuando cada uno de ellos llama a @@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  

El conjunto de resultados es el siguiente:

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

Consulte también

Funciones de configuración (Transact-SQL)
Crear un procedimiento almacenado
@@TRANCOUNT (Transact-SQL)