J'essaie d'écrire le SQL suivant. Cependant, c'est une syntaxe incorrecte (ce qui suit affiche le message d'erreur). Dois-je le convertir en sous-requêtes? J'essaie d'éviter d'élargir le CTE dans plusieurs endroits. P> Syntaxe incorrecte près du mot clé "avec". Si cette déclaration est une expression de table commune, une clause XMLNamesPaces ou une clause de contexte de suivi des modifications, l'instruction précédente doit être terminée avec un point-virgule. P>
blockQuote>
Le pour xml code> et
commande par code> fait
SELECT @s = ... code> p> p> p>
3 Réponses :
Je pense que c'est comme si vous essayez d'attribuer la valeur. Essayez d'utiliser la méthode suivante à la place:
declare @s varchar(max); with temp as ( select .... from ... join c on .... join c on .... join c on .... for xml raw('...'), elements ) select @s = value from temp select @s
Le pour XML code> le rend probablement pas réalisable?
Je ne suis pas sûr. Je ne suis pas capable de le tester pour le moment. Je recommanderais d'essayer la méthode que j'ai fournie ci-dessus. L'erreur que vous obteniez ne semble pas être liée à l'utilisation de pour xml code> ...
"Lorsqu'un CTE est utilisé dans une déclaration faisant partie d'un lot, la déclaration avant qu'elle doit être suivie d'un point-virgule."
avec TEMP comme (Sélectionnez ... pour XML ...) CODE> doit être remplacé par
avec C comme (...), TEMP (valeur) comme (...) code>.
Quelqu'un pourrait-il vous expliquer pourquoi SELECT @s = code> fonctionne, mais
SET @s = code> n'est pas?
OK, je l'ai compris. Il ne peut pas être fait dans une déclaration de déclaration et d'initialisation.
declare @s varchar(max); with c as (select 1 a union all select 2 union all select 3) , x(s) as (select a from c order by a desc for xml raw('tr'), elements) select @s = s from x
@Be - "Le secret de l'originalité est d'oublier la source" i> +1 à votre réponse.
Vous devez séparer la déclaration de Quelque chose comme ça fonctionnera pour vous. p> @s code> à partir de l'affectation.
<row>
<ID>1</ID>
<Col1>10</Col1>
<ID>1</ID>
<Col1>10</Col1>
</row>
<row>
<ID>2</ID>
<Col1>20</Col1>
<ID>2</ID>
<Col1>20</Col1>
</row>