Вашите проблеми:
-
Опитвате се да използвате изхода на
SelectChild
, който е от тип XML, като съдържание на атрибута@ListDirectChildren
. Не можете да използвате XML на това място, следователно той се обработва (и екранира) като нормален текст. Опитвате ли се да създадете вид рекурсивен дъщерен списък? -
Във вашата външна заявка прехвърляте XML към
VARCHAR(MAX)
(между другото:използвайте винагиNVARCHAR
във връзка с XML). Отново ще принудите двигателя да третира този текст като текст и следователно да го екранира. -
Опитвате се да добавите низа "null", за да изразите липсата на стойност. Но XML работи по различен начин:a. Елементът напълно липсва в XML:Запитването му ще върне
NULL
, това е добре.b. За някои правила елементът трябва да е там, но трябва да е празен:
<ListDirectChildren></ListDirectChildren>
или<ListDirectChildren />
(което означава абсолютно същото). Заяветеtext()
на възела и получаватеNULL
, това също е добре.° С. За някои правила искате да маркирате елемента като
NULL
. ИзползвайтеXSINIL
Опитайте това за варианти на empty
и 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
Резултатът:
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Опитайте това за XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
за да получите това
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Моето предложение:
Този въпрос
се надяваме, че е решен. Моля, започнете нов въпрос, където добавяте още данни към вашия примерен сценарий, за да отразите множество деца, поставете връзка към този въпрос и посочете очаквания резултат (как трябва да изглежда XML).