2012-12-17 27 views
10

En yüksek ortalama CPU zamanı ile sorguları bulmak için basit bir sorguyu çalıştırmaya çalışıyorum. kod anlamıyla here den-yapıştırılan kopya edilir:sözdizimi hatası CROSS APPLY

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; 

Sorun, SQL Server sys.dm_exec_sql_text için parametre satırında 8'de bir sözdizimi hatasıyla ilgili olduğunu: qs.sql_handle unhelpfully okur

Incorrect syntax near '.'. 

Yapamam Hayatımın için sorgunun nesi yanlış olduğunu bul. Herhangi bir fikir?

cevap

22

Bu demektir ya

  1. SQL Server 2005 çalıştıran değil; veya daha büyük olasılıkla
  2. uyumluluk modunda 90 veya Sen 90 veya kullanarak yukarıdaki değiştirebilirsiniz

üzeri işletim sistemine, ancak olabilir çok iyi mola uygulamaları çok. değil

alter database MyDataBaseName set compatibility_level = 90 

yukarıda 2005 ve SQL Server üzerinde en kolay çözüm "efendi" veya "tempdb", ör onu çalıştırmak için basitçe

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; 
+0

Uyumluluk seviyelerini tamamen unutmuşum! SQL Server 2008 R2 ile çalışıyorum, ancak bu özel db'de uyumluluk düzeyi 80 olarak ayarlandı (iyi bir neden olmadan). – vlad

+2

Bu cevap çalışır, ancak saklı bir yordamda böyle bir sorguyu yürütmek mümkün mü? Çünkü saklı yordamında 'USE master'ı kullanamazsınız. – jtate