Vos problèmes :
-
Vous essayez d'utiliser la sortie de
SelectChild, qui est de type XML, comme contenu de l'attribut@ListDirectChildren. Vous ne pouvez pas utiliser XML à cet endroit, il est donc traité (et échappé) comme du texte normal. Essayez-vous de créer une sorte de liste enfant récursive ? -
Dans votre requête externe, vous convertissez le XML en
VARCHAR(MAX)(au fait :utilisez toujoursNVARCHARen relation avec XML). Encore une fois, vous forcerez le moteur à traiter ce texte comme du texte et donc à l'échapper. -
Vous essayez d'ajouter la chaîne "null" pour exprimer l'absence d'une valeur. Mais XML fonctionne différemment :a. L'élément est complètement absent du XML :l'interroger renverra
NULL, c'est bien.b. Pour certaines règles, l'élément doit être là, mais doit être vide :
<ListDirectChildren></ListDirectChildren>ou<ListDirectChildren />(ce qui signifie exactement la même chose). Interroger letext()du nœud et vous obtenezNULL, c'est bien aussi.c. Pour certaines règles, vous souhaitez marquer l'élément comme
NULL. UtiliserXSINIL
Essayez ceci pour les variantes de empty et null :
DECLARE @x XML=
'<root>
<testempty1 />
<testempty2></testempty2>
</root>';
SELECT @x.value('(/root/testempty1)[1]','nvarchar(max)') AS testempty1_Content
,@x.value('(/root/testempty1/text())[1]','nvarchar(max)') AS testempty1_Text
,@x.value('(/root/testempty2)[1]','nvarchar(max)') AS testempty2_Content
,@x.value('(/root/testempty2/text())[1]','nvarchar(max)') AS testempty2_Text
,@x.value('(/root/NotExistingElement)[1]','nvarchar(max)') AS NotExistingElement_Content
,@x.value('(/root/NotExistingElement/text())[1]','nvarchar(max)') AS NotExistingElement_Text
Le résultat :
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Essayez ceci pour XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
pour obtenir ceci
<row xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Ma suggestion :
Cette question
est j'espère résolu. Veuillez commencer une nouvelle question où vous ajoutez des données supplémentaires à votre exemple de scénario pour refléter plusieurs enfants, placez un lien vers cette question et indiquez le résultat attendu (à quoi le XML devrait ressembler).