Fragen Sie XML ab, indem Sie Feldnamen erstellen, ohne die Knotennamen zu kennen
Wenn ich eine SQL Server 2012-Tabelle habe, die einen XML-Feldtyp enthält. Folgende Datensätze können enthalten sein.
Ich habe mein Problem folgendermaßen vereinfacht.
Datensatz 1:
ID_FIELD='nn1'
XML_FIELD=
<KNOWN_NAME_1>
<UNKNOWN_NAME1>Some value</UNKNOWN_NAME1>
<UNKNOWN_NAME2>Some value</UNKNOWN_NAME2>
... Maybe more ...
</KNOWN_NAME_1>
Datensatz 2:
ID_FIELD='nn2'
XML_FIELD=
<KNOWN_NAME_2>
<UNKNOWN_NAME1>Some value</UNKNOWN_NAME1>
<UNKNOWN_NAME2>Some value</UNKNOWN_NAME2>
... Maybe more unknown fields ...
</KNOWN_NAME_2>
Ich möchte nicht xml ausgeben:
UNKNOWN_NAME1 | UNKNOWN_NAME2 | ETC
-----------------------------------
Some Value Some value
Für einen bekannten Stammwert (d. H. KNOWN_NAME_1)
Das heißt Wenn ich die Knotenwerte neu einstelle (was ich nicht tue) könnte ich
SELECT
XMLData.Node.value('UNKNOWN_NAME1[1]', 'varchar(100)') ,
XMLData.Node.value('UNKNOWN_NAME2[1], 'varchar(100)')
FROM FooTable
CROSS APPLY MyXmlField.nodes('//KNOWN_NAME_1') XMLData(Node)
-- WHERE SOME ID value = 'NN1' (all XML records have a separate id)
Alles ist gut, aber ich möchte dies für alle Knoten (unbekannte Anzahl) tun, ohne die Knotennamen zu kennen. Die Wurzel enthält nur Knoten, die nicht tiefer werden.
Ist das in SQL möglich?
Ich habe mir das angeschaut, aber ich bezweifle, dass ich genug Rechte bekommen kann, um es umzusetzen.