2010-10-04 4 views
2

je la requête suivante:requête (SQL Server 2008 Express) fonctionne dans SQL Server Management Studio, mais pas dans Delphi en utilisant ADODB

WITH cte AS (
    SELECT 
     windowId, frameIndx, elemIndx, comment, 
     ROW_NUMBER() OVER (PARTITION BY frameIndx ORDER BY elemIndx DESC) 
    AS 
     rn 
    FROM 
     dbo.translations 
    WHERE 
     windowId = 1 AND frameIndx IN (
      SELECT 
       indx 
      FROM 
       dbo.translations_window 
      WHERE program_id = 1 AND active = 1 
    ) 
) 
SELECT 
    windowId, frameIndx, elemIndx, comment 
FROM 
    cte 
WHERE 
    rn = 1 

La requête est exécutée sans problème lors de l'exécution dans SQL Server 2008 R2 Developer (peu importe comment), SQL Server 2005 Express et SQL Server 2008 R2 Express en utilisant le studio de gestion (ce travail pour les deux derniers). Mais dès que j'essaye d'exécuter ces requêtes en utilisant ADODB de Delphi, j'obtiens une erreur.

Incorrect syntax near the keyword WITH 

Ces types de requêtes ne sont-ils pas autorisés dans les versions express de SQL? quel est le problème dans la requête? Le client utilise SQL Express, donc j'ai besoin de trouver une solution à ce problème qui s'exécute dans la version express.

+0

Sonne comme ADODB ne supporte pas ce ... –

Répondre

8

Je ne sais pas si ça aide, mais vous pouvez essayer de put a semicolon avant votre requête:

; WITH cte AS (
... 
+0

Donc 4 upvotes et accept .... Est-ce que Sambatyon confirme que cela résout le problème? Si c'est le cas, je vais upvote aussi. –

+0

Je peux confirmer que cela est nécessaire pour utiliser les CTE sur les requêtes ADODB. –

+0

La plupart des documentations utilisant des CTE que j'ai vues suggèrent d'ajouter un; avant le avec, fondamentalement "être sûr d'être sûr". –

Questions connexes