Condividi tramite


@@NESTLEVEL (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Restituisce il livello di nidificazione dell'esecuzione corrente di stored procedure (il livello iniziale è 0) nel server locale.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

@@NESTLEVEL  

Tipi restituiti

int

Osservazioni:

Ogni volta che una stored procedure ne richiama un'altra oppure esegue codice gestito tramite un riferimento a una routine CLR, un tipo CLR o una funzione di aggregazione CLR, il livello di nidificazione viene incrementato. Quando viene superato il livello massimo pari a 32, la transazione viene interrotta.

Se la funzione @@NESTLEVEL viene eseguita all'interno di una stringa Transact-SQL, il valore restituito è 1 + il livello di nidificazione corrente. Quando @@NESTLEVEL viene eseguito in modo dinamico usando sp_executesql il valore restituito è 2 + il livello di annidamento corrente.

Esempi

R. Uso di @@NESTLEVEL in una procedura

Nell'esempio seguente vengono create due procedure: una procedura che richiama l'altra e una che visualizza le impostazioni della funzione @@NESTLEVEL di ciascuna procedura.

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  

Il set di risultati è il seguente.

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

B. Chiamata di @@NESTLEVEL

Nell'esempio seguente viene illustrata la differenza dei valori restituiti dalle istruzioni SELECT, EXEC e sp_executesql quando ogni istruzione richiama la funzione @@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  

Il set di risultati è il seguente.

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

Vedi anche

Funzioni di configurazione (Transact-SQL)
Creazione di una stored procedure
@@TRANCOUNT (Transact-SQL)