13

我正在尝试运行一个简单的查询来查找平均 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;

问题是,SQL Server 在第 8 行的参数 to 处抱怨语法错误sys.dm_exec_sql_textqs.sql_handle这无济于事

Incorrect syntax near '.'.

对于我的一生,我无法弄清楚查询有什么问题。有任何想法吗?

4

1 回答 1

26

这意味着你要么

  1. 未运行 SQL Server 2005;或更可能
  2. 未在兼容模式 90 或更高版本下运行

您可以将其更改为 90 或以上使用,但它很可能会破坏很多应用程序。

alter database MyDataBaseName set compatibility_level = 90

SQL Server 2005 及更高版本上最简单的解决方案是简单地从“master”或“tempdb”运行它,例如

USE tempdb;
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;
于 2012-12-17T21:40:39.130 回答