Partilhar via


sys.fn_get_sql (Transact-SQL)

Aplica-se a:SQL Server

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

Importante

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

Transact-SQL convenções de sintaxe

Sintaxe

  
sys.fn_get_sql ( SqlHandle )  

Argumentos

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

Tabelas devolvidas

Nome da coluna Tipo de dados Descrição
Dbid Smallint ID da base de dados. Para instruções SQL ad hoc e preparadas, a ID do banco de dados onde as instruções foram compiladas.
Objectid Int ID do objeto de banco de dados. É NULL para instruções SQL ad hoc.
número Smallint Indica o número do grupo, se os procedimentos estiverem agrupados.

0 = As entradas não são procedimentos.

NULL = Instruções SQL ad hoc.
criptografado bit Indica se o objeto está criptografado.

0 = Não criptografado

1 = Criptografado
Texto texto É o texto da instrução SQL. É NULL para objetos criptografados.

Observações

Você pode obter um identificador SQL válido na 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 no cache, fn_get_sql retornará um conjunto de resultados vazio. Se você passar um identificador que não é válido, o lote para e uma mensagem de erro é retornada.

O Mecanismo de Banco de Dados do SQL Server não pode armazenar em cache algumas instruções Transact-SQL, como instruções de cópia em massa e instruções com literais de cadeia de caracteres maiores que 8 KB. Os identificadores dessas instruções não podem ser recuperados usando fn_get_sql.

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

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

  • Quando os eventos têm mais de 255 caracteres.

  • Quando você precisa retornar o nível de aninhamento atual mais alto de um procedimento armazenado. Por exemplo, há dois procedimentos armazenados chamados 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 em execução, 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 de aninhamento atual mais alto.

Permissões

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

Exemplos

Os administradores de banco de dados podem usar a função fn_get_sql, conforme mostrado no exemplo a seguir, para ajudar a diagnosticar processos problemáticos. Depois que um administrador identifica uma ID de sessão com problema, o administrador pode recuperar o identificador SQL para essa sessão, chamar fn_get_sql com o identificador e, em seguida, usar os deslocamentos de início e fim para determinar o texto SQL da ID da sessão de 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  

Ver também

DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)