Uw problemen:
-
U probeert de uitvoer van
SelectChild
. te gebruiken , van het type XML, als de inhoud van het attribuut@ListDirectChildren
. U kunt XML op deze plaats niet gebruiken, daarom wordt het behandeld (en escaped) als normale tekst. Probeer je een soort recursieve onderliggende lijst te maken? -
In je buitenste query cast je de XML naar
VARCHAR(MAX)
(btw:gebruik altijdNVARCHAR
in combinatie met XML). Nogmaals, je dwingt de engine om deze tekst als tekst te behandelen en er dus aan te ontsnappen. -
U probeert de tekenreeks "null" toe te voegen om het ontbreken van een waarde uit te drukken. Maar XML werkt anders:a. Het element ontbreekt volledig in de XML:Als u het opvraagt, wordt
NULL
. geretourneerd , dat is prima.b. Voor sommige regels moet het Element aanwezig zijn, maar moet het leeg zijn:
<ListDirectChildren></ListDirectChildren>
of<ListDirectChildren />
(wat precies hetzelfde betekent). Vraag detext()
van het knooppunt op en je krijgtNULL
, dat is ook goed.c. Voor sommige regels wil je het element markeren als
NULL
. GebruikXSINIL
Probeer dit voor variaties van empty
en 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
Het resultaat:
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Probeer dit voor XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
om dit te krijgen
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Mijn suggestie:
Deze vraag
is hopelijk opgelost. Begin een nieuwe vraag waarin u wat meer gegevens toevoegt aan uw voorbeeldscenario om meerdere kinderen weer te geven, plaats een link naar deze vraag en vermeld de verwachte uitvoer (hoe de XML eruit zou moeten zien).