Ihre Probleme:
-
Sie versuchen, die Ausgabe von
SelectChild
zu verwenden , die vom Typ XML ist, als Inhalt des Attributs@ListDirectChildren
. Sie können XML an dieser Stelle nicht verwenden, daher wird es als normaler Text behandelt (und maskiert). Versuchen Sie, eine Art rekursive untergeordnete Liste zu erstellen? -
In Ihrer äußeren Abfrage wandeln Sie das XML in
VARCHAR(MAX)
um (Übrigens:verwende immerNVARCHAR
in Verbindung mit XML). Auch hier zwingen Sie die Engine, diesen Text als Text zu behandeln und ihn daher zu maskieren. -
Sie versuchen, die Zeichenfolge "null" hinzuzufügen, um das Fehlen eines Werts auszudrücken. Aber XML funktioniert anders:a. Das Element fehlt im XML vollständig:Die Abfrage liefert
NULL
zurück , das ist in Ordnung.b. Für einige Regeln muss das Element vorhanden sein, sollte aber leer sein:
<ListDirectChildren></ListDirectChildren>
oder<ListDirectChildren />
(was genau dasselbe bedeutet). Fragen Sie dentext()
des Knotens ab und Sie erhaltenNULL
, das ist auch in Ordnung.c. Für einige Regeln möchten Sie das Element als
NULL
markieren . Verwenden SieXSINIL
Versuchen Sie dies für Variationen von empty
und null
:
DECLARE @x XML=
'<root>
<testempty1 />
<testempty2></testempty2>
</root>';
SELECT @x.value('(/root/testempty1)[1]','nvarchar(max)') AS testempty1_Content
,@x.value('(/root/testempty1/text())[1]','nvarchar(max)') AS testempty1_Text
,@x.value('(/root/testempty2)[1]','nvarchar(max)') AS testempty2_Content
,@x.value('(/root/testempty2/text())[1]','nvarchar(max)') AS testempty2_Text
,@x.value('(/root/NotExistingElement)[1]','nvarchar(max)') AS NotExistingElement_Content
,@x.value('(/root/NotExistingElement/text())[1]','nvarchar(max)') AS NotExistingElement_Text
Das Ergebnis:
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Versuchen Sie dies für XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
um das zu bekommen
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Mein Vorschlag:
Diese Frage
ist hoffentlich gelöst. Bitte beginnen Sie eine neue Frage, in der Sie Ihrem Beispielszenario weitere Daten hinzufügen, um mehrere Kinder widerzuspiegeln, einen Link zu dieser Frage platzieren und die erwartete Ausgabe angeben (wie das XML aussehen soll).