Share via


fn_get_sql (Transact-SQL)

Retorna o texto da instrução SQL do identificador SQL especificado.

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez disso, use sys.dm_exec_sql_text. Para obter mais informações, consulte sys.dm_exec_sql_text (Transact-SQL).

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

sys.fn_get_sql ( SqlHandle )

Argumentos

  • SqlHandle
    É o valor do identificador. SqlHandle é varbinary(64) sem nenhum padrão.

Tabelas retornadas

Nome da coluna

Tipo de dados

Descrição

dbid

smallint

ID do banco de dados. É NULL para instruções SQL ad hoc.

objectid

int

ID do objeto do banco de dados. É NULL para instruções SQL ad hoc.

number

smallint

Indica o número do grupo e se os procedimentos estão agrupados.

0 = Entradas não são procedimentos.

NULL = Instruções SQL ad hoc.

encrypted

bit

Indica se o objeto está criptografado.

0 = Não criptografado

1 = Criptografado

text

text

É o texto da instrução SQL. É NULL para objetos criptografados.

Comentários

Você pode obter um identificador SQL válido da coluna sql_handle da exibição de gerenciamento dinâmico sys.dm_exec_requests (Transact-SQL).

Se você passar um identificador que não existe mais em cache, fn_get_sql retornará um conjunto de resultados vazio. Se você passar um identificador inválido, o lote parará e uma mensagem de erro será retornada.

O Mecanismo de banco de dados do SQL Server não pode armazenar em cache algumas instruções Transact-SQL, como, por exemplo, instruções de cópia em massa e instruções com literais de cadeia de caracteres maiores que 8 KB. Identificadores para essas instruções não podem ser recuperados usando fn_get_sql.

A coluna text do conjunto de resultados é filtrada para texto que pode conter senhas. Para obter mais informações relacionadas à segurança de procedimentos armazenados que não são monitorados, consulte Filtrando um rastreamento.

A função fn_get_sql retorna informações semelhantes ao comando DBCC INPUTBUFFER. Veja, a seguir, exemplos de quando a função fn_get_sql pode ser usada, porque o DBCC INPUTBUFFER não pode ser usado:

  • Quando eventos têm mais de 255 caracteres.

  • Quando você tem que retornar o nível mais alto de aninhamento atual de um procedimento armazenado. Por exemplo, há dois procedimentos armazenados que são nomeados sp_1 e sp_2. Se sp_1 chamar sp_2 e você obtiver o identificador da exibição de gerenciamento dinâmico sys.dm_exec_requests enquanto sp_2 estiver sendo executado, a função fn_get_sql retornará informações sobre sp_2. Além disso, a função fn_get_sql retorna o texto completo do procedimento armazenado no nível atual de aninhamento mais alto.

Permissões

O usuário precisa da permissão VIEW SERVER STATE no servidor.

Exemplos

Administradores de banco de dados podem usar a função fn_get_sql, conforme mostrado no exemplo a seguir, para ajudar a diagnosticar processos de problemas. Depois de identificar a ID de sessão de um problema, o administrador pode recuperar o identificador SQL daquela sessão, chamar fn_get_sql com o identificador e, em seguida, usar os deslocamentos de início e de término para determinar o texto SQL da ID de sessão do problema.

DECLARE @Handle varbinary(64);
SELECT @Handle = sql_handle 
FROM sys.dm_exec_requests 
WHERE session_id = 52 and request_id = 0;
SELECT * FROM sys.fn_get_sql(@Handle);
GO