Dine problemer:
-
Du prøver at bruge outputtet fra
SelectChild
, som er af typen XML, som indholdet af attributten@ListDirectChildren
. Du kan ikke bruge XML på dette sted, derfor håndteres (og escaped) som normal tekst. Forsøger du at oprette en slags rekursiv underordnet liste? -
I din ydre forespørgsel caster du XML til
VARCHAR(MAX)
(btw:brug altidNVARCHAR
i forbindelse med XML). Igen vil du tvinge motoren til at behandle denne tekst som tekst og derfor undslippe den. -
Du forsøger at tilføje strengen "null" for at udtrykke den manglende værdi. Men XML fungerer anderledes:a. Elementet mangler fuldstændigt i XML:Hvis du forespørger på det, returneres
NULL
, det er fint.b. For nogle regler skal Elementet være der, men skal være tomt:
<ListDirectChildren></ListDirectChildren>
eller<ListDirectChildren />
(hvilket betyder nøjagtig det samme). Forespørg nodenstext()
og du fårNULL
, det er også fint.c. For nogle regler vil du markere elementet som
NULL
. BrugXSINIL
Prøv dette for varianter af empty
og 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
Resultatet:
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Prøv dette for XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
for at få dette
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Mit forslag:
Dette spørgsmål
er forhåbentlig løst. Start et nyt spørgsmål, hvor du tilføjer nogle flere data til dit eksempelscenarie for at afspejle flere børn, placer et link til dette spørgsmål og angiv det forventede output (hvordan XML skal se ud).