我看过一篇文章,从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