CROSS APPLY中的语法错误

时间:2012-12-17 21:33:30

标签: sql-server tsql dmv

我试图运行一个简单的查询来查找平均CPU时间最长的查询。该代码实际上是从here复制粘贴的:

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行的sys.dm_exec_sql_textqs.sql_handle参数无法读取

时出现语法错误
Incorrect syntax near '.'.

对于我的生活,我不能弄清楚查询有什么问题。有什么想法吗?

1 个答案:

答案 0 :(得分:25)

这意味着你要么

  1. 没有运行SQL Server 2005;或者更可能
  2. 未在兼容模式90或以上
  3. 中运行

    您可以使用它将其更改为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;