I tuoi problemi:
-
Provi a utilizzare l'output di
SelectChild
, che è di tipo XML, come contenuto dell'attributo@ListDirectChildren
. Non è possibile utilizzare XML in questa posizione, quindi viene gestito (e sottoposto a escape) come testo normale. Stai tentando di creare una specie di elenco figlio ricorsivo? -
Nella tua query esterna trasmetti l'XML a
VARCHAR(MAX)
(a proposito:usa sempreNVARCHAR
in relazione a XML). Ancora una volta forzerai il motore a trattare questo testo come testo e quindi a eseguirne l'escape. -
Si tenta di aggiungere la stringa "null" per esprimere la mancanza di un valore. Ma XML funziona in modo diverso:a. L'elemento manca completamente nell'XML:interrogandolo si restituirà
NULL
, va bene.b. Per alcune regole l'Elemento deve essere presente, ma deve essere vuoto:
<ListDirectChildren></ListDirectChildren>
o<ListDirectChildren />
(che significa esattamente lo stesso). Interroga iltext()
del nodo e ottieniNULL
, va bene anche questo.c. Per alcune regole vuoi contrassegnare l'elemento come
NULL
. UsaXSINIL
Prova per varianti di empty
e 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
Il risultato:
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Prova questo per XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
per ottenere questo
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Il mio suggerimento:
Questa domanda
si spera risolto. Inizia una nuova domanda in cui aggiungi altri dati al tuo scenario di esempio per riflettere più bambini, inserisci un collegamento a questa domanda e indica l'output previsto (come dovrebbe apparire l'XML).