sys.fn_get_sql (Transact-SQL)sys.fn_get_sql (Transact-SQL)

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Retorna o texto da instrução SQL do identificador SQL especificado.Returns the text of the SQL statement for the specified SQL handle.

Importante

Esse recurso será removido em uma versão futura do Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Em vez disso, use sys.dm_exec_sql_text.Use sys.dm_exec_sql_text instead. Para obter mais informações, consulte DM exec_sql_text (Transact-SQL).For more information, see sys.dm_exec_sql_text (Transact-SQL).

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

  
sys.fn_get_sql ( SqlHandle )  

ArgumentosArguments

SqlHandleSqlHandle
É o valor do identificador.Is the handle value. SqlHandle está varbinary(64) sem nenhum padrão.SqlHandle is varbinary(64) with no default.

Tabelas retornadasTables Returned

Nome da colunaColumn name Tipo de dadosData type DescriçãoDescription
dbiddbid smallintsmallint ID do banco de dados.Database ID. Para instruções SQL preparadas e ad hoc, a ID do banco de dados no qual as instruções foram compiladas.For ad hoc and prepared SQL statements, the ID of the database where the statements were compiled.
objectidobjectid intint ID do objeto do banco de dados.ID of the database object. É NULL para instruções SQL ad hoc.Is NULL for ad hoc SQL statements.
numbernumber smallintsmallint Indica o número do grupo e se os procedimentos estão agrupados.Indicates the number of the group, if the procedures are grouped.

0 = Entradas não são procedimentos.0 = Entries are not procedures.

NULL = Instruções SQL ad hoc.NULL = Ad hoc SQL statements.
encryptedencrypted bitbit Indica se o objeto está criptografado.Indicates whether the object is encrypted.

0 = não criptografado0 = Not encrypted

1 = Criptografado1 = Encrypted
texttext texttext É o texto da instrução SQL.Is the text of the SQL statement. É NULL para objetos criptografados.Is NULL for encrypted objects.

ComentáriosRemarks

Você pode obter um identificador SQL válido da coluna sql_handle dos . DM exec_requests (Transact-SQL) exibição de gerenciamento dinâmico.You can obtain a valid SQL handle from the sql_handle column of the sys.dm_exec_requests (Transact-SQL) dynamic management view.

Se você passar um identificador que não existe no cache, fn_get_sql retorna um conjunto de resultados vazio.If you pass a handle that no longer exists in cache, fn_get_sql returns an empty result set. Se você passar um identificador inválido, o lote parará e uma mensagem de erro será retornada.If you pass a handle that is not valid, the batch stops, and an error message is returned.

O Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine não é possível armazenar em cache alguns Transact-SQLTransact-SQL instruções, como instruções de cópia em massa e instruções com literais de cadeia de caracteres que são maiores que 8 KB.The Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine cannot cache some Transact-SQLTransact-SQL statements, such as bulk copy statements and statements with string literals that are larger than 8 KB. Identificadores para essas instruções não podem ser recuperados usando fn_get_sql.Handles to those statements cannot be retrieved by using fn_get_sql.

O texto coluna do conjunto de resultados é filtrada para texto que pode conter senhas.The text column of the result set is filtered for text that may contain passwords. Para obter mais informações relacionadas à segurança de procedimentos armazenados que não são monitorados, consulte filtrar um rastreamento.For more information about security related stored procedures that are not monitored, see Filter a Trace.

A função fn_get_sql retorna informações semelhantes para o DBCC INPUTBUFFER comando.The fn_get_sql function returns information that is similar to the DBCC INPUTBUFFER command. Veja, a seguir, exemplos de quando a função fn_get_sql pode ser usada, porque o DBCC INPUTBUFFER não pode ser usado:The following are examples of when the fn_get_sql function can be used because DBCC INPUTBUFFER cannot be:

  • Quando eventos têm mais de 255 caracteres.When events have more than 255 characters.

  • Quando você tem que retornar o nível mais alto de aninhamento atual de um procedimento armazenado.When you have to return the highest current nesting level of a stored procedure. Por exemplo, há dois procedimentos armazenados que são nomeados sp_1 e sp_2.For example, there are two stored procedures that are named sp_1 and 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.If sp_1 calls sp_2 and you obtain the handle from the sys.dm_exec_requests dynamic management view while sp_2 is running, the fn_get_sql function returns information about 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.Additionally, the fn_get_sql function returns the complete text of the stored procedure at the highest current nesting level.

PermissõesPermissions

O usuário precisa da permissão VIEW SERVER STATE no servidor.The user needs VIEW SERVER STATE permission on the server.

ExemplosExamples

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.Database administrators can use the fn_get_sql function, as shown in the following example, to help diagnose problem processes. 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.After an administrator identifies a problem session ID, the administrator can retrieve the SQL handle for that session, call fn_get_sql with the handle, and then use the start and end offsets to determine the SQL text of the problem session ID.

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  

Consulte tambémSee Also

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