2010-09-27 7 views
2

Je lis un article de this website, mais quand je lance le code article fourni, je reçois l'erreur:Quel est le problème avec cette instruction select T-SQL?

Msg 102, Level 15, State 1, Line 16 
Incorrect syntax near '.'. 

Je revérifié la syntaxe et ne peut pas trouver la cause de cette erreur. Le code est le suivant, formaté par SQL Prompt.

Quelqu'un peut-il m'aider? Grand merci.

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 

Edit:

Je lance la requête supérieure à l'aide SSMS 2008 contre une base de données SQL Server 2005. Lorsque j'essaie d'utiliser SSMS 2005 exécuter la même requête sur une base de données SQL Server 2005, tout fonctionne correctement. Comme je le sais, SSMS 2008 peut se connecter à une base de données SQL Server 2005 et opérer dessus, non? J'ai aussi essayé un autre exemple, listé ci-dessous. C'est vraiment simple. De même, il s'exécute avec succès lors de l'utilisation de SSMS 2005 contre SQL Server 2005. Lors de l'utilisation de SSMS 2008 contre SQL Server 2005, il renvoie la même erreur que celle mentionnée précédemment.

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 

Quelqu'un at-il une idée à ce sujet?

Merci.


Edit 2:

Juste essayé, en utilisant SSMS 2008 contre SQL Server 2008 fonctionne très bien.

+2

Je ne le vois pas tout de suite mais j'essaierais d'affiner le problème en sélectionnant d'abord * au lieu de la liste des champs. Cela vous donnera au moins une idée de la partie avec laquelle il a des problèmes. –

+0

Oui, j'ai changé la colonne en * et toujours obtenir l'erreur. Donc, je pense que l'erreur vient de la partie de. Mais la partie de est assez simple et je ne peux pas trouver quelque chose d'intéressant. –

Répondre

3

Vous dites que vous vous connectez à une "base de données SQL Server 2005" plusieurs fois. Cela signifie-t-il un serveur SQL Server 2005?

Je suis capable de reproduire votre problème lorsque j'utilise SQL Server 2008 SSMS sur le serveur SQL Server 2008. Cela se produit lorsque mon niveau de compatibilité de base de données pour la base de données en cours est SQL Server 2000, qui ne possède pas les fonctionnalités que vous essayez. Lorsque je change de base de données, la commande fonctionne.

Vérifiez le niveau de compatibilité de votre base de données. La commande fonctionnera si SQL Server 2005 ou plus tard.

+0

Oui, vous avez raison. Je vous remercie! –

1

Rien à redire sur le SQL en soi ["works on my machine" (tm)] donc il s'agit probablement d'une erreur de données. La fonction de sous-chaîne est le suspect le plus probable. Essayez de l'exécuter avec TOP 1 et/ou dans l'ordre inverse.

+0

Salut Steven, comment exécutez-vous cette requête? Je veux dire quelle base de données, quel outil client etc. –

+0

Salut @Yousui - je l'ai juste collé dans une nouvelle fenêtre de requête dans le gestionnaire d'entreprise, avec la base de données par défaut définie sur le système. SQL Server 2008 R2 –

Questions connexes