Dina problem:
-
Du försöker använda utdata från
SelectChild
, som är av typen XML, som innehåll av attributet@ListDirectChildren
. Du kan inte använda XML på denna plats, därför hanteras den (och escaped) som normal text. Försöker du skapa en typ av rekursiv underordnad lista? -
I din yttre fråga castar du XML till
VARCHAR(MAX)
(btw:använd alltidNVARCHAR
i samband med XML). Återigen kommer du att tvinga motorn att behandla denna text som text och därför undkomma den. -
Du försöker lägga till strängen "null" för att uttrycka att ett värde saknas. Men XML fungerar annorlunda:a. Elementet saknas helt i XML:en om du frågar det kommer att returnera
NULL
, det är bra.b. För vissa regler måste elementet finnas där, men bör vara tomt:
<ListDirectChildren></ListDirectChildren>
eller<ListDirectChildren />
(vilket betyder exakt samma sak). Fråga nodenstext()
och du fårNULL
, det är också bra.c. För vissa regler vill du markera elementet som
NULL
. AnvändXSINIL
Prova detta för varianter av empty
och 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
Prova detta för XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
för att få det här
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Mitt förslag:
Den här frågan
är förhoppningsvis löst. Starta en ny fråga där du lägger till lite mer data till ditt exempelscenario för att återspegla flera barn, placera en länk till denna fråga och ange förväntad utdata (hur XML ska se ut).