@@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)