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 ! :-)

È stato utile?

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top