sys.dm_exec_sql_text

更新日期: 2006 年 12 月 12 日

返回由指定的 sql_handle 标识的 SQL 批处理的文本。该表值函数将替换系统函数 fn_get_sql

语法

 sys.dm_exec_sql_text(sql_handle)

参数

  • sql_handle
    要查找的批处理的 SQL 句柄。sql_handle 的数据类型为 varbinary(64)。可以从以下动态管理对象中获得 sql_handle

    • sys.dm_exec_query_stats
    • sys.dm_exec_requests
    • sys.dm_exec_cursors
    • sys.dm_exec_xml_handles
    • sys.dm_exec_query_memory_grants

返回的表

列名 数据类型 说明

dbid

smallint

数据库的 ID。

对于临时和预定义 SQL 语句为 NULL。

objectid

int

对象的 ID。

对于临时和预定义 SQL 语句为 NULL。

number

smallint

对于带编号的存储过程,此列返回存储过程的编号。有关详细信息,请参阅sys.numbered_procedures (Transact-SQL)

对于临时和预定义 SQL 语句为 NULL。

encrypted

bit

1 = SQL 文本已加密。

0 = SQL 文本未加密。

text

nvarchar(max)

SQL 查询的文本。

对于已加密对象为 NULL。

备注

对于批处理,SQL 句柄是基于 SQL 文本的哈希值。对于诸如存储过程、触发器或函数之类的数据库对象,SQL 句柄派生自数据库 ID、对象 ID 和对象编号。

权限

需要对服务器具有 VIEW SERVER STATE 权限。

示例

A. 获取有关按平均 CPU 时间排在最前面的五个查询的信息

以下示例返回前五个查询的 SQL 语句文本和平均 CPU 时间。

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;

B. 提供批处理执行统计信息

以下示例返回按批执行的 SQL 查询的文本,并提供有关它们的统计信息。

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;

请参阅

参考

动态管理视图和函数
与执行有关的动态管理视图和函数
sys.dm_exec_query_stats
sys.dm_exec_requests
sys.dm_exec_cursors
sys.dm_exec_xml_handles
sys.dm_exec_query_memory_grants

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

更改的内容:
  • 更新了 sql_handle 的说明。
  • 添加了预定义语句将在 dbidobjectidnumber 列中返回 NULL。

2006 年 4 月 14 日

更改的内容:
  • 更新了返回的列的说明,以包括 Null 值定义。
  • 纠正了示例。

2005 年 12 月 5 日

更改的内容:
  • text 字段的数据类型从 text 改为 nvarchar(max)