@@NESTLEVEL (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Retorna o nível aninhando da execução de procedimento armazenado atual (inicialmente 0) no servidor local.

Convenções de sintaxe de Transact-SQL

Sintaxe

@@NESTLEVEL  

Tipos de retorno

int

Comentários

O nível é incrementado sempre que um procedimento armazenado chama outro procedimento armazenado ou executa código gerenciado fazendo referência a uma rotina, um tipo ou uma agregação CLR (Common Language Runtime). Quando o máximo de 32 for excedido, a transação será terminada.

Quando @@NESTLEVEL for executado em uma cadeia de caracteres do Transact-SQL, o valor retornado será 1 + o nível de aninhamento atual. Quando @@NESTLEVEL for executado dinamicamente usando sp_executesql, o valor retornado será 2 + o nível de aninhamento atual.

Exemplos

a. Usando @@NESTLEVEL em um procedimento

O exemplo a seguir cria dois procedimentos: um que chama o outro e um que exibe a configuração @@NESTLEVEL de cada um deles.

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  

Veja a seguir o conjunto de resultados.

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

B. Chamando @@NESTLEVEL

O exemplo a seguir mostra a diferença nos valores retornados por SELECT, EXEC e sp_executesql quando cada um deles chama @@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  

Veja a seguir o conjunto de resultados.

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

Confira também

Funções de configuração (Transact-SQL)
Criar um procedimento armazenado
@@TRANCOUNT (Transact-SQL)