我正在阅读this website中的一篇文章,但是当我运行该文章提供的代码时,我收到错误:
Msg 102, Level 15, State 1, Line 16
Incorrect syntax near '.'.
我仔细检查了语法,但找不到此错误的原因。代码如下,由SQL Prompt格式化。
任何人都可以帮助我吗?非常感谢。
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
编辑:
我使用SSMS 2008针对SQL Server 2005数据库运行上层查询。当我尝试使用SSMS 2005对SQL Server 2005数据库运行相同的查询时,一切正常。据我所知,SSMS 2008可以连接到SQL Server 2005数据库并对其进行操作,对吧?我还尝试了另一个例子,如下所示。这真的很简单。类似地,它在针对SQL Server 2005使用SSMS 2005时成功执行。当针对SQL Server 2005使用SSMS 2008时,它会提供与我之前提到的相同的错误。
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:
刚试过,使用SSMS 2008对抗SQL Server 2008工作正常。
答案 0 :(得分:3)
您说您连接了几次“SQL Server 2005数据库”。这是否意味着SQL Server 2005服务器?
当我在SQL Server 2008服务器上使用SQL Server 2008 SSMS时,我能够重现您的问题。当我的当前数据库的数据库兼容级别是SQL Server 2000时,会发生这种情况,而SQL Server 2000没有您正在尝试的功能。当我切换数据库时,命令有效。
检查数据库的兼容级别。如果SQL Server 2005或更高版本,该命令将起作用。
答案 1 :(得分:1)
SQL本身[“在我的机器上工作”(tm)]没有错,所以它可能是一个数据错误。子串函数是最可能的嫌疑人。尝试使用TOP 1和/或以相反的顺序运行它。