Zapytanie XML tworzące nazwy pól bez znajomości nazw węzłów
Jeśli mam tabelę SQL SERVER 2012 zawierającą typ pola XML. Rekordy, które może zawierać, są następujące.
Uprościłem mój problem do następujących.
Rekord 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>
Rekord 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>
Chcę wydrukować plik inny niż xml:
UNKNOWN_NAME1 | UNKNOWN_NAME2 | ETC
-----------------------------------
Some Value Some value
Dla znanej wartości roota (tj. KNOWN_NAME_1)
To znaczy. Jeśli dodam wartości węzłów (których nie mam), mógłbym
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)
Wszystko jest dobrze, ale chcę to zrobić dla wszystkich węzłów (nieznana ilość) bez znajomości nazw węzłów. Korzeń będzie zawierał tylko węzły, których nie dostanie głębiej.
Czy jest to możliwe w SQL?
Przyjrzałem się temu, ale wątpię, czy mogę uzyskać wystarczające prawa do jego wdrożenia.