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.

http://architectshack.com/ClrXmlShredder.ashx

Antworten auf die Frage(1)

Ihre Antwort auf die Frage