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;

sys.dm_exec_sql_text問題は、SQL Server が 8 行目のパラメータ to :の構文エラーについて不平を言っていることqs.sql_handleです。

Incorrect syntax near '.'.

私の人生では、クエリの何が問題なのかを理解することはできません。何か案は?

4

1 に答える 1

26

それはあなたがどちらかであることを意味します

  1. SQLServer2005を実行していない。またはより可能性が高い
  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 に答える