Pregunta

Tengo un bastante grande SELECT ... FOR XML PATH. Como saben, de forma predeterminada, los elementos XML correspondientes a los campos con un valor nulo no aparecen en el árbol de XML de resultado. Parece ser un problema real para mí y quiero que siempre aparezcan todos los elementos, ya sea que el valor sea nulo o no.

¿Hay alguna manera de lograrlo sin rodear cada campo? ISNULL(...,'') uno por uno (¡más de 50 campos en mi selección!) Y sin cambiar el FOR XML PATH dentro FOR XML ELEMENTS usar el XSINIL Switch (que desafortunadamente está disponible solo con ELEMENTS) ?

Sospecho que estas 2 soluciones no establecidas generamente darían como resultado diferentes resultados, por cierto: <fieldname></fieldname> y <fieldname/> respectivamente. Si es posible, preferiría el primero, pero de todos modos estoy ansioso por leer sus preciosas sugerencias.

Gracias por adelantado ! :-)

¿Fue útil?

Solución

sin cambiar la ruta For XML en elementos para XML para usar el interruptor XSinil

Puedes usar elements xsinil con for xml path.

declare @T table (ID int identity, Name varchar(50))

insert into @T values ('Name1')
insert into @T values (null)
insert into @T values ('Name2')

select
  ID,
  Name
from @T
for xml path('item'), root('root'), elements xsinil

Resultado:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <item>
    <ID>1</ID>
    <Name>Name1</Name>
  </item>
  <item>
    <ID>2</ID>
    <Name xsi:nil="true" />
  </item>
  <item>
    <ID>3</ID>
    <Name>Name2</Name>
  </item>
</root>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top