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 toujoursNVARCHAR
en 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="http://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).