Elementi XML presenti nonostante i valori nulli
-
28-10-2019 - |
Domanda
Ho abbastanza grande SELECT ... FOR XML PATH
. Come sapete, per impostazione predefinita elementi XML corrispondenti ai campi con un valore nullo non compaiono nell'albero XML del risultato. Sembra essere un vero problema per me e voglio che appaiano sempre tutti gli elementi, che il valore sia nullo o no.
C'è un modo per raggiungerlo senza circondare ogni campo ISNULL(...,'')
uno per uno (più di 50 campi nella mia selezione!) E senza cambiare il FOR XML PATH
in FOR XML ELEMENTS
Per usare il XSINIL
interruttore (che purtroppo è disponibile solo con ELEMENTS
) ?
Sospetto che queste 2 soluzioni non insoddisfacenti non si traduceranno in output diversi, a proposito: <fieldname></fieldname>
e <fieldname/>
rispettivamente. Se possibile, preferirei il primo, ma sono comunque ansioso di leggere i tuoi preziosi suggerimenti.
Grazie in anticipo ! :-)
Soluzione
Senza cambiare il percorso per XML in per gli elementi XML per utilizzare l'interruttore xsinil
Puoi usare elements xsinil
insieme a 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
Risultato:
<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>