Condividi tramite


@@NESTLEVEL (Transact-SQL)

Restituisce il livello di nidificazione dell'esecuzione corrente di stored procedure (il livello iniziale è 0) nel server locale. Per informazioni sui livelli di nidificazione, vedere Nidificazione di stored procedure.

Icona di collegamento a un argomentoConvenzioni della 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. Se la funzione @@NESTLEVEL viene eseguita dinamicamente tramite la stored procedure sp_executesql, il valore restituito è 2 + il livello di nidificazione corrente.

Esempi

A. Utilizzo 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 AdventureWorks;
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

Set di risultati:

Outer Level
-----------
1          

Inner Level
-----------
2

B. Chiamata alla funzione @@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

Set di risultati:

Current Nest Level 
------------------ 
1

(1 row(s) affected)

OneGreater  
----------- 
2

(1 row(s) affected)

TwoGreater  
----------- 
3

(1 row(s) affected)