Frage

Ich habe eine ziemlich große SELECT ... FOR XML PATH. Wie Sie wissen, erscheinen standardmäßig XML -Elemente, die Feldern mit einem Nullwert entsprechen, nicht im Ergebnis XML -Baum. Es scheint ein echtes Problem für mich zu sein und ich möchte immer alle Elemente angezeigt haben, ob der Wert null ist oder nicht.

Gibt es eine Möglichkeit, dies zu erreichen, ohne jedes Feld durch zu umgeben? ISNULL(...,'') eins nach dem anderen (mehr als 50 Felder in meinem Auswählen!) Und ohne das zu ändern FOR XML PATH hinein FOR XML ELEMENTS Um das zu verwenden XSINIL Schalter (was leider nur mit erhältlich ist ELEMENTS) ?

Ich vermute, dass diese 2 nicht entsprechenden Lösungen übrigens zu unterschiedlichen Ausgaben führen würden: <fieldname></fieldname> und <fieldname/> beziehungsweise. Wenn möglich, würde ich den ersten bevorzugen, aber ich bin trotzdem gespannt darauf, Ihre wertvollen Vorschläge zu lesen.

Danke im Voraus ! :-)

War es hilfreich?

Lösung

ohne den für XML -Pfad für XML -Elemente zu ändern, um den Xsinil -Schalter zu verwenden

Sie können verwenden elements xsinil mit 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

Ergebnis:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top