繁体   English   中英

此T-SQL select语句有什么问题?

[英]What's wrong with this T-SQL select statement?

我正在从该网站上阅读文章,但是当我运行该文章提供的代码时,出现错误:

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:

刚刚尝试过,对SQL Server 2008使用SSMS 2008可以正常工作。

您说要连接到“ SQL Server 2005数据库”几次。 这是否意味着SQL Server 2005服务器?

当我在SQL Server 2008服务器上使用SQL Server 2008 SSMS时,我能够重现您的问题。 当我对当前数据库的数据库兼容性级别是SQL Server 2000时,就会发生这种情况,而SQL Server 2000没有您要使用的功能。 当我切换数据库时,该命令有效。

检查数据库的兼容性级别。 如果SQL Server 2005或更高版本,该命令将起作用。

SQL本身没有什么问题[“在我的机器上工作”(tm)],所以它可能是数据错误。 子字符串函数最有可能被怀疑。 尝试以TOP 1和/或相反的顺序运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM