Что не так с этим оператором выбора T-SQL? - PullRequest
2 голосов
/ 27 сентября 2010

Я читаю статью с этого сайта , но когда я запускаю код, предоставленный этой статьей, я получаю ошибку:

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 и работать на ней, верно?Также я попробовал другой пример, приведенный ниже.Это действительно просто.Точно так же он успешно выполняется при использовании SSMS 2005 против SQL Server 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:

Только что попробовал, использование SSMS 2008 против SQL Server 2008 работает нормально.

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

Вы говорите, что подключаетесь к «базе данных SQL Server 2005» пару раз. Означает ли это сервер SQL Server 2005?

Я могу воспроизвести вашу проблему, когда я использую SQL Server 2008 SSMS на сервере SQL Server 2008. Это происходит, когда моим уровнем совместимости базы данных для текущей базы данных является SQL Server 2000, который не имеет функций, которые вы пробуете. Когда я переключаю базу данных, команда работает.

Проверьте уровень совместимости для вашей базы данных. Команда будет работать, если SQL Server 2005 или более поздняя версия.

1 голос
/ 27 сентября 2010

нет ничего плохого в SQL как таковом ["работает на моей машине" (tm)], так что это, вероятно, ошибка данныхФункция подстроки является наиболее вероятным.Попробуйте запустить его с TOP 1 и / или в обратном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...