Tus problemas:
-
Intenta usar la salida de
SelectChild
, que es de tipo XML, como el contenido del atributo@ListDirectChildren
. No puede usar XML en este lugar, por lo tanto, se maneja (y escapa) como texto normal. ¿Está intentando crear una especie de lista recursiva de niños? -
En su consulta externa, envía el XML a
VARCHAR(MAX)
(por cierto:usa siempreNVARCHAR
en relación con XML). Una vez más, obligará al motor a tratar este texto como texto y, por lo tanto, escapar de él. -
Intenta agregar la cadena "null" para expresar la falta de un valor. Pero XML funciona de manera diferente:a. El elemento falta en el XML por completo:consultarlo devolverá
NULL
, está bien.b. Para algunas reglas, el elemento debe estar allí, pero debe estar vacío:
<ListDirectChildren></ListDirectChildren>
o<ListDirectChildren />
(que significa exactamente lo mismo). Consulta eltext()
del nodo y obtienesNULL
, eso también está bien.C. Para algunas reglas, desea marcar el elemento como
NULL
. UtiliceXSINIL
Prueba esto para variaciones de empty
y 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
El resultado:
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Prueba esto para XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
para conseguir esto
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Mi sugerencia:
Esta pregunta
es de esperar que se solucione. Inicie una nueva pregunta en la que agregue más datos a su escenario de muestra para reflejar varios niños, coloque un enlace a esta pregunta e indique el resultado esperado (cómo debería verse el XML).