Question

J'ai une assez grande SELECT ... FOR XML PATH. Comme vous le savez, par des éléments par défaut XML correspondant aux champs avec une valeur null ne figure pas dans l'arbre XML résultat. Il semble être un vrai problème pour moi et je veux toujours avoir tous les éléments apparaissent, si la valeur est nulle ou non.

Yat-il un moyen d'y parvenir sans l'entourer chaque champ par un de ISNULL(...,'') par un (plus de 50 champs dans mon SELECT!) Et sans changer la FOR XML PATH en FOR XML ELEMENTS d'utiliser l'interrupteur XSINIL (qui est malheureusement disponible uniquement avec ELEMENTS) ?

Je soupçonne que ces 2 solutions entièrement non-statisfying entraînerait des sorties différentes, par la voie: <fieldname></fieldname> et <fieldname/> respectivement. Si possible, je préfèrerais le premier, mais je suis quand même hâte de lire vos suggestions précieuses.

Merci d'avance! : -)

Était-ce utile?

La solution

sans modifier le XML pour le chemin en Pour les éléments XML pour utiliser le XSINIL Commutateur

Vous pouvez utiliser elements xsinil avec 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

Résultat:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top