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

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Возвращает текст 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_handlevarbinary(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_handlevarbinary(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.

Дескриптор плана — это значение хэша, производным от скомпилированного плана всего пакета.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 напрямую или с помощью CROSS APPLY.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)
С помощью применить   sys.dm_exec_text_query_plan (Transact-SQL)Using APPLY   sys.dm_exec_text_query_plan (Transact-SQL)