Elementos XML presentes a pesar de los valores nulos
-
28-10-2019 - |
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 ! :-)
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>