Partilhar via


@@NESTLEVEL (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

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

Transact-SQL convenções de sintaxe

Sintaxe

@@NESTLEVEL  

Tipos de devolução

int

Observações

Cada vez que um procedimento armazenado chama outro procedimento armazenado ou executa código gerido referenciando uma rotina, tipo ou agregado de common language runtime (CLR), o nível de aninhamento é incrementado. Quando o máximo de 32 é ultrapassado, a transação é terminada.

Quando @@NESTLEVEL é executado dentro de uma cadeia de Transact-SQL, o valor devolvido é 1 + o nível de aninhamento atual. Quando @@NESTLEVEL é executado dinamicamente usando sp_executesql o valor devolvido é 2 + o nível atual de aninhamento.

Examples

A. Usar @@NESTLEVEL num procedimento

O exemplo seguinte cria dois procedimentos: um que chama o outro e outro que mostra a @@NESTLEVEL definição de cada um.

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  

Aqui está o conjunto de resultados.

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

B. A chamar @@NESTLEVEL

O exemplo seguinte mostra a diferença nos valores devolvidos por SELECT, , e sp_executesql quando cada um deles chama @@NESTLEVELEXEC.

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  

Aqui está o conjunto de resultados.

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

Ver também

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