Eu sei que existe um DBCC INPUTBUFFER
comando no SQL Server, que
Exibe a última instrução enviada de um cliente para uma instância do SQL Server.
Para mim, parece que o buffer de entrada é o SQL que uma sessão está executando.
O SQL Server também possui sys.dm_exec_sql_text
, que
Retorna o texto do lote SQL identificado pelo sql_handle especificado.
E sys.dm_exec_input_buffer
, qual
Retorna informações sobre instruções enviadas a uma instância do SQL Server.
Estou meio confuso. Eles parecem muito semelhantes e não identificáveis para mim.
Também encontrei um artigo Understanding the sql_text Action in Extended Events
de Jonathan Kehayias. No artigo, ele afirma
Com esta sessão de evento criada, podemos executar alguns cenários de teste diferentes no ambiente para mostrar como esta ação não é o sql_text, mas sim o input_buffer para o evento que está sendo disparado
Ele está muito confiante de que o texto SQL não é um buffer de entrada, e não entendo o motivo. Alguém poderia ajudar a esclarecer um pouco por favor? Obrigado.
DBCC INPUTBUFFER
Exibe o comando realmente enviado pelo cliente na sessão especificada (e solicitação específica). Isso pode ser um lote ad hoc ou um procedimento.
sys.dm_exec_input_buffer
É a forma mais recente da anterior, que permite que o conjunto de resultados seja usado como parte de outra consulta.
sys.dm_exec_sql_text
Fornece o texto SQL para um identificador de lote ou plano específico.
Você pode obter esse identificador de várias maneiras, mas geralmente obterá um para o comando atualmente
sys.dm_exec_requests
em execução de uma sessão via , que pode ser aninhado na pilha de chamadas da solicitação original, como por meio de um procedimento, função ou gatilho. Como isso pode fazer parte de um lote SQL maior, você precisa usarstatement_start_offset
estatement_end_offset
analisar o texto exato do comando que está sendo executado.sql_text
ação em eventos estendidos é um problema específico com XEvents, que a ação (campo de dados) chamadasql_text
realmente representa o buffer de entrada, não o comando atualmente em execução, ou seja, o resultado teórico desys.dm_exec_input_buffer
não desys.dm_exec_sql_text
.