在非XML列中解析XML

时间:2010-04-12 22:50:16

标签: sql-server xml sql-server-2008 sql-server-2005

我对SQLServer非常熟练,但我不是DBA所以我不确定如何处理这个问题。

我有一个存储在ntext列中的XML块。由于它是遗留数据库和项目的要求,我无法更改表(尚未)。这是我需要操作的数据的一个例子:

<XmlSerializableHashtable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Entries>
        <Entry>
            <key xsi:type="xsd:string">CurrentYear</key><value xsi:type="xsd:string">2010</value>
        </Entry>
        <Entry>
            <key xsi:type="xsd:string">CurrentMonth</key><value xsi:type="xsd:string">4</value>
        </Entry>
    </Entries>
</XmlSerializableHashtable>

每一行都有这样的块,但显然XML中的键/值不同。有没有聪明的方法可以将这个XML解析为名称/值对样式视图?或者我应该使用SQLServer的XML查询功能,即使它不是XML列?如果是这样,我将如何从该列中查询特定值?

(注意:如果有帮助,可以在表的末尾添加计算的XML列。)

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果您可以将列添加到XML类型列,则可以使用xpath查询从中获取数据。 OTOH我猜测将其转换为XML的计算列可能会起作用。 YMMV,但测试它应该不难。

您可以使用cross apply从XML值字段中获取重复组。 cross apply有效地将列的值戳入表值函数,并允许您加入结果。 This link显示了如何执行此操作的示例。

我最近有机会这样做(第一次),但我没有代码样本,我不记得它在我的头顶。您可以使用此技术在XML文档中以层次结构自连接多个图层。

相关问题