如果我有一个包含 XML 字段类型的 SQL SERVER 2012 表。它可以包含的记录如下。
我已将我的问题简化为以下内容。
记录 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 中可能吗?
我已经看过这个,但我怀疑我能否获得足够的权利来实施它。