Запрос XML, создающий имена полей без знания имен узлов
Если у меня есть таблица SQL SERVER 2012, содержащая тип поля XML. Записи, которые это могло содержать, следующие.
Я упростил мою проблему до следующего.
Запись 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>
Запись 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>
Я хочу вывести не XML:
UNKNOWN_NAME1 | UNKNOWN_NAME2 | ETC
-----------------------------------
Some Value Some value
Для известного корневого значения (т.е. KNOWN_NAME_1)
То есть Если я добавлю новые значения узлов (которые я не использую), я мог бы
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)
Все хорошо, однако я хочу сделать это для всех узлов (неизвестное количество), не зная имен узлов. Корень будет содержать только узлы, которые он не получит глубже.
Возможно ли это в SQL?
Я смотрел на это, но сомневаюсь, что смогу получить достаточно прав для его реализации.