2010-09-10 7 views
27

Est-ce que quelqu'un a réussi à créer un CTE dans SQL Server T-SQL qui inclut également une déclaration WITH XMLNAMESPACES?Combiner CTE "WITH" et "WITH XMLNAMESPACES ...." dans SQL Server

Il semble que les deux mots-clés WITH insistent sur le fait d'être la "première dans le lot T-SQL", et cela ne fonctionne pas vraiment ....

J'ai essayé:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns) 
WITH CTEQuery AS 
(
SELECT (list of fields) 
    FROM dbo.MyTable 
    WHERE (conditions) 
) 
SELECT * FROM CTEQuery 

Didn » travail t :-((erreurs de syntaxe)

Msg 156, niveau 15, état 1, ligne 2
syntaxe incorrecte près du mot clé 'avec'.
Msg 319, niveau 15, état 1, ligne 2
Syntaxe incorrecte près du mot clé 'avec'. Si cette instruction est une expression de table commune , une clause xmlnamespaces ou une clause de contexte de suivi , l'instruction précédente doit être terminée par un point-virgule .

donc j'ai essayé préfixer le deuxième WITH avec un point-virgule:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns) 
;WITH CTEQuery AS 
(
SELECT (list of fields) 
    FROM dbo.MyTable 
    WHERE (conditions) 
) 
SELECT * FROM CTEQuery 

et obtenu ceci:

Msg 102, niveau 15, état 1, ligne 2
syntaxe incorrecte près ';'

puis j'ai essayé de mettre le WITH XMLNAMESPACES dans le CTE:

WITH CTEQuery AS 
(
    WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns) 
    SELECT (list of fields) 
     FROM dbo.MyTable 
     WHERE (conditions) 
) 
SELECT * FROM CTEQuery 

et a obtenu ceci:

Msg 156, niveau 15, état 1, ligne 4
syntaxe incorrecte près le mot-clé 'WITH'.
Msg 319, niveau 15, état 1, ligne 4
Syntaxe incorrecte près du mot clé 'avec'. Si cette instruction est une expression de table commune , une clause xmlnamespaces ou une clause de contexte de suivi , l'instruction précédente doit être terminée par un point-virgule .
Msg 102, niveau 15, état 1, ligne 21
Syntaxe incorrecte près de ')'.

Alors, comment diable puis-je faire cela ??

Répondre

42

Utilisez une virgule au lieu de la seconde WITH, par ex. La même chose si vous voulez des expressions CTE multiples. Vous avez seulement besoin de spécifier WITH une fois, puis tous les autres blocs WITH utilisent simplement une virgule au lieu du mot-clé.

+2

Et 'XMLNAMESPACES' doit d'abord être défini, avant tout 'CTE'. – Gabrielius