@@NESTLEVEL (Transact-SQL)

Retorna o nível aninhando da execução de procedimento armazenado atual (inicialmente 0) no servidor local. Para obter informações sobre níveis de aninhamento, consulte Aninhando procedimentos armazenados.

Ícone de vínculo de tópicoConvenções de sintaxe 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, tipo ou agregado 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 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 AdventureWorks2008R2;
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.

Nível externo

-----------

1

Nível interno

-----------

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

Aqui está o conjunto de resultados.

Nível de ninho atual

------------------

1

(1 linha(s) afetada(s))

OneGreater

-----------

2

(1 linha(s) afetada(s))

TwoGreater

-----------

3

(1 linha(s) afetada(s))