Combiner CTE "WITH" et "WITH XMLNAMESPACES …" dans SQL Server

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

Il semble que les deux mots-keys insistent pour être le "premier 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 

N'a pas fonctionné 🙁 (erreurs de syntaxe)

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

J'ai donc essayé de précéder la seconde 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 j'ai eu ceci:

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

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 j'ai eu ceci:

Msg 156, niveau 15, état 1, ligne 4
Syntaxe incorrecte près du mot key 'WITH'.
Msg 319, niveau 15, état 1, ligne 4
Syntaxe incorrecte près du mot key 'avec'. Si cette instruction est une expression de table commune, une clause xmlnamespaces ou une clause de context de suivi des modifications, 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 ça?

    Utilisez une virgule au lieu de la seconde WITH , par exemple

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

    La même chose si vous voulez plusieurs expressions CTE. Vous avez seulement besoin de spécifier WITH une fois, puis tous les autres blocs WITH utilisent simplement une virgule au lieu du mot-key.