sys.dm_exec_sql_text (Transact-SQL)sys.dm_exec_sql_text (Transact-SQL)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database

Возвращает текст пакета SQL, идентифицируемого указанным sql_handle.Returns the text of the SQL batch that is identified by the specified sql_handle. Функция с табличным значением заменяет системную функцию fn_get_sql.This table-valued function replaces the system function fn_get_sql.

СинтаксисSyntax

sys.dm_exec_sql_text(sql_handle | plan_handle)  

АргументыArguments

sql_handlesql_handle
Токен, однозначно определяющий пакет, который был выполнен или в данный момент выполняется.Is a token that uniquely identifies a batch that has executed or is currently executing. sql_handle имеет тип varbinary (64).sql_handle is varbinary(64).

Sql_handle можно получить из следующих объектов DMO:The sql_handle can be obtained from the following dynamic management objects:

plan_handleplan_handle
Токен, однозначно определяющий план выполнения запроса для пакета, который был выполнен, а его план находится в кэше планов или в данный момент выполняется.Is a token that uniquely identifies a query execution plan for a batch that has executed and its plan resides in the plan cache, or is currently executing. plan_handle имеет тип varbinary (64).plan_handle is varbinary(64).

Plan_handle можно получить из следующих объектов DMO:The plan_handle can be obtained from the following dynamic management objects:

Возвращаемая таблицаTable Returned

Имя столбцаColumn name Тип данныхData type ОписаниеDescription
DBIDdbid smallintsmallint Идентификатор базы данных.ID of database.

Для нерегламентированных и подготовленных инструкций SQL это идентификатор базы данных, в которой происходила компиляция инструкции.For ad hoc and prepared SQL statements, the ID of the database where the statements were compiled.
objectidobjectid intint Идентификатор объекта.ID of object.

Имеет значение NULL для нерегламентированных и подготовленных инструкций SQL.Is NULL for ad hoc and prepared SQL statements.
numbernumber smallintsmallint Для пронумерованной хранимой процедуры этот столбец возвращает ее номер.For a numbered stored procedure, this column returns the number of the stored procedure. Дополнительные сведения см. в разделе sys. numbered_procedures ()Transact-SQL .For more information, see sys.numbered_procedures (Transact-SQL).

Имеет значение NULL для нерегламентированных и подготовленных инструкций SQL.Is NULL for ad hoc and prepared SQL statements.
Шифрованиеencrypted bitbit 1 = текст SQL зашифрован.1 = SQL text is encrypted.

0 = текст SQL не зашифрован.0 = SQL text is not encrypted.
texttext nvarchar (Max )nvarchar(max ) Текст SQL-запроса.Text of the SQL query.

Имеет значение NULL для зашифрованных объектов.Is NULL for encrypted objects.

РазрешенияPermissions

Необходимо разрешение VIEW SERVER STATE на сервере.Requires VIEW SERVER STATE permission on the server.

ПримечанияRemarks

Для нерегламентированных запросов дескрипторы SQL являются хэш-значениями на основе текста SQL, отправляемого на сервер, и могут исходить из любой базы данных.For ad hoc queries, the SQL handles are hash values based on the SQL text being submitted to the server, and can originate from any database.

Для таких объектов баз данных, как хранимые процедуры, триггеры или функции, дескрипторы SQL создаются на основе идентификатора базы данных, идентификатора объекта, а также номера объекта.For database objects such as stored procedures, triggers or functions, the SQL handles are derived from the database ID, object ID, and object number.

Handle Plan — это хэш-значение, полученное из скомпилированного плана всего пакета.Plan handle is a hash value derived from the compiled plan of the entire batch.

Примечание

невозможно определить DBID из sql_handle для нерегламентированных запросов.dbid cannot be determined from sql_handle for ad hoc queries. Чтобы определить DBID для нерегламентированных запросов, используйте вместо этого plan_handle .To determine dbid for ad hoc queries, use plan_handle instead.

ПримерыExamples

A.A. Концептуальный примерConceptual Example

Ниже приведен простой пример, иллюстрирующий передачу sql_handle либо напрямую, либо с ПЕРЕкрестным применением.The following is a basic example to illustrate passing a sql_handle either directly or with CROSS APPLY.

  1. Создать действие.Create activity.
    Выполните следующий T-SQL в новом окне запроса в SQL Server Management StudioSQL Server Management Studio .Execute the following T-SQL in a new query window in SQL Server Management StudioSQL Server Management Studio.

    -- Identify current spid (session_id)
    SELECT @@SPID;
    GO
    
    -- Create activity
      WAITFOR DELAY '00:02:00';
    
  2. Использование CROSS APPLY.Using CROSS APPLY.
    Sql_handle из sys. dm_exec_requests будут переданы в представление sys. Dm_exec_sql_text с помощью CROSS APPLY.The sql_handle from sys.dm_exec_requests will be passed to sys.dm_exec_sql_text using CROSS APPLY. Откройте новое окно запроса и передайте SPID, определенный на шаге 1.Open a new query window and pass the spid identified in step 1. В этом примере SPID имеет значение 59 .In this example the spid happens to be 59.

    SELECT t.*
    FROM sys.dm_exec_requests AS r
    CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
    WHERE session_id = 59 -- modify this value with your actual spid
    
  3. Передача sql_handle напрямую.Passing sql_handle directly.
    Получение sql_handle из sys. dm_exec_requests.Acquire the sql_handle from sys.dm_exec_requests. Затем передайте sql_handle непосредственно в sys. dm_exec_sql_text.Then, pass the sql_handle directly to sys.dm_exec_sql_text. Откройте новое окно запроса и передайте SPID, определенный в шаге 1, в sys. dm_exec_requests.Open a new query window and pass the spid identified in step 1 to sys.dm_exec_requests. В этом примере SPID имеет значение 59 .In this example the spid happens to be 59. Затем передайте возвращенный sql_handle в качестве аргумента в sys. dm_exec_sql_text.Then pass the returned sql_handle as an argument to sys.dm_exec_sql_text.

    -- acquire sql_handle
    SELECT sql_handle FROM sys.dm_exec_requests WHERE session_id = 59  -- modify this value with your actual spid
    
    -- pass sql_handle to sys.dm_exec_sql_text
    SELECT * FROM sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000) -- modify this value with your actual sql_handle
    

Б.B. Получение сведений о пяти первых запросах по среднему времени ЦПObtain information about the top five queries by average CPU time

Следующий пример возвращает текст инструкции SQL и среднее время ЦП для пяти первых запросов.The following example returns the text of the SQL statement and average CPU time for the top five queries.

SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],  
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,   
        ((CASE qs.statement_end_offset  
          WHEN -1 THEN DATALENGTH(st.text)  
         ELSE qs.statement_end_offset  
         END - qs.statement_start_offset)/2) + 1) AS statement_text  
FROM sys.dm_exec_query_stats AS qs  
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
ORDER BY total_worker_time/execution_count DESC;  

В.C. Предоставление статистики пакетного выполненияProvide batch-execution statistics

Следующий пример возвращает текст запросов SQL, выполняемых в пакетах, и статистические сведения о них.The following example returns the text of SQL queries that are being executed in batches and provides statistical information about them.

SELECT s2.dbid,   
    s1.sql_handle,    
    (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,   
      ( (CASE WHEN statement_end_offset = -1   
         THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)   
         ELSE statement_end_offset END)  - statement_start_offset) / 2+1))  AS sql_statement,  
    execution_count,   
    plan_generation_num,   
    last_execution_time,     
    total_worker_time,   
    last_worker_time,   
    min_worker_time,   
    max_worker_time,  
    total_physical_reads,   
    last_physical_reads,   
    min_physical_reads,    
    max_physical_reads,    
    total_logical_writes,   
    last_logical_writes,   
    min_logical_writes,   
    max_logical_writes    
FROM sys.dm_exec_query_stats AS s1   
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2    
WHERE s2.objectid is null   
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;  

См. также разделSee also

Динамические административные представления и функции (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Динамические административные представления и функции, связанные с выполнением (Transact-SQL) Execution Related Dynamic Management Views and Functions (Transact-SQL)
sys. dm_exec_query_stats (Transact-SQL) sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL) sys.dm_exec_requests (Transact-SQL)
sys. dm_exec_cursors (Transact-SQL) sys.dm_exec_cursors (Transact-SQL)
sys. dm_exec_xml_handles (Transact-SQL) sys.dm_exec_xml_handles (Transact-SQL)
sys. dm_exec_query_memory_grants (Transact-SQL) sys.dm_exec_query_memory_grants (Transact-SQL)
Использование инструкции Apply   sys. dm_exec_text_query_plan (Transact-SQL)Using APPLY   sys.dm_exec_text_query_plan (Transact-SQL)