我看過一篇文章,從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工作正常。
我沒有馬上看到它,但我會嘗試通過首先選擇*而不是字段列表來縮小問題的範圍。這至少會讓你知道它遇到了哪些問題。 – 2010-09-27 03:01:54
是的,我將列更改爲*並仍然出現錯誤。所以我認爲錯誤來自於部分。但從部分是非常簡單,我找不到有趣的東西。 – 2010-09-27 03:16:15