@@NESTLEVEL (Transact-SQL)

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database SíInstancia administrada de Azure SQL

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

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQL

Sintaxis

@@NESTLEVEL  

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 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 @@NESTLEVEL se ejecuta en una cadena de Transact-SQL, el valor devuelto es 1 + el nivel de anidamiento actual. Cuando @@NESTLEVEL se ejecuta 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 AdventureWorks2012;  
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)

Vea también

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