2010-09-27 50 views
2

我看過一篇文章,從this website,但是當我運行本文提供的代碼,我得到的錯誤:這個T-SQL select語句有什麼問題?

Msg 102, Level 15, State 1, Line 16 
Incorrect syntax near '.'. 

我仔細檢查了語法和無法找到此錯誤的原因。代碼如下,由SQL提示符格式化。

有人可以幫我嗎?萬分感謝。

SELECT es.session_id , 
     es.host_name , 
     es.login_name , 
     er.status , 
     DB_NAME(database_id) AS DatabaseName , 
     SUBSTRING(qt.text, (er.statement_start_offset/2) + 1, ((CASE WHEN er.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
                      ELSE er.statement_end_offset 
                     END - er.statement_start_offset)/2) + 1) AS [Individual Query] , 
     qt.text AS [Parent Query] , 
     es.program_name , 
     er.start_time , 
     qp.query_plan , 
     er.wait_type , 
     er.total_elapsed_time , 
     er.cpu_time , 
     er.logical_reads , 
     er.blocking_session_id , 
     er.open_transaction_count , 
     er.last_wait_type , 
     er.percent_complete 
FROM sys.dm_exec_requests AS er 
     INNER JOIN sys.dm_exec_sessions AS es ON es.session_id = er.session_id 
     CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt 
     CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) qp 
WHERE es.is_user_process = 1 
     AND es.session_Id NOT IN (@@SPID) 
ORDER BY es.session_id 

編輯:

我運行使用2008年SSMS針對SQL Server 2005數據庫上查詢。當我嘗試使用SSMS 2005對SQL Server 2005數據庫運行相同的查詢時,一切正常。據我所知,SSMS 2008可以連接到SQL Server 2005數據庫並對其進行操作,對吧?我還嘗試了另一個例子,下面列出。這真的很簡單。同樣,在對SQL Server 2005使用SSMS 2005時,它可以成功執行。當使用SSMS 2008對SQL Server 2005時,它提供了與我早期提到的相同的錯誤。

SELECT stat.sql_handle , 
     sqltext.text SQL 
FROM sys.dm_exec_query_stats stat 
     CROSS APPLY sys.dm_exec_sql_text(stat.sql_handle) sqltext 

有人對此有一些想法嗎?

謝謝。


編輯2:

剛試過,用2008年SSMS針對SQL Server 2008工作正常。

+2

我沒有馬上看到它,但我會嘗試通過首先選擇*而不是字段列表來縮小問題的範圍。這至少會讓你知道它遇到了哪些問題。 – 2010-09-27 03:01:54

+0

是的,我將列更改爲*並仍然出現錯誤。所以我認爲錯誤來自於部分。但從部分是非常簡單,我找不到有趣的東西。 – 2010-09-27 03:16:15

回答

3

你說你幾次連接到「SQL Server 2005數據庫」。這是否意味着一個SQL Server 2005服務器?

我能夠在SQL Server 2008服務器上使用SQL Server 2008 SSMS時重現您的問題。當我的當前數據庫的數據庫兼容級別爲SQL Server 2000時,會發生這種情況,但沒有您正在嘗試的功能。當我切換數據庫時,該命令起作用。

檢查數據庫的兼容性級別。如果SQL Server 2005或更高版本,該命令將工作。

+0

是的你是對的。謝謝! – 2010-09-27 04:29:23

1

沒有錯誤的SQL本身[「在我的機器上工作」(tm)],所以它可能是一個數據錯誤。子字符串函數是最有可能的嫌疑犯。嘗試使用TOP 1和/或以相反的順序運行它。

+0

嗨史蒂文,你如何執行該查詢?我的意思是什麼數據庫,什麼客戶端工具等 – 2010-09-27 03:14:12

+0

嗨@Yousui - 我只是將其粘貼到企業管理器中的新查詢窗口,默認數據庫設置爲系統。 SQL Server 2008 R2 – 2010-09-27 13:27:07