2010-09-27 76 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