T-SQL 将 XML 字段转换为多列数据集 [英] T-SQL Convert XML field to multi-column dataset

查看:33
本文介绍了T-SQL 将 XML 字段转换为多列数据集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将 XML 字段拆分"为多列数据集.XML 看起来像:

I want to 'split' XML field to the multiple columns dataset. XML looking like:

<simple>
    <propertyid>
        <value>p1</value>
        <value>p2</value>
        <value>p3</value>
        <value>p4</value>
    </propertyid>
    <complexid>
        <value>c1</value>
        <value>c2</value>
        <value>c3</value>
    </complexid>
</simple>

我尝试做类似的事情(每次在 TSQL 中使用 XML 时我都觉得很烦,所以我的代码是错误的):

I tried to do something like that (each time I working with XML in TSQL I feel butthurt, so my code is wrong):

;WITH source AS (
    SELECT CAST(@xmlstring AS XML) AS x
)
SELECT 
    items.item.query('.')
FROM source
CROSS APPLY x.nodes('/simple/*/value') AS items(item)

预期数据集:

ColumnName      Value
------------------------
propertyid      p1
propertyid      p2
propertyid      p3
propertyid      p4
complexid       c1
complexid       c2
complexid       c3

我怎样才能得到要求的结果?也许你可以推荐一些很好的资源,包括 T-SQL + XML + XQuery 解释和示例?

How can I get required result? Maybe you can recommend good resource with T-SQL + XML + XQuery explanations and samples?

推荐答案

这是我自己的 1 CROSS APPLY 解决方案:

And here is my own solution with 1 CROSS APPLY:

;WITH source AS (
    SELECT CAST(@xmlstring AS XML) AS x
)
SELECT
    items.item.value('local-name(..)', 'varchar(300)') AS ColumnName,
    items.item.value('text()[1]', 'varchar') AS Value
FROM source
CROSS APPLY x.nodes('/simple/*/value') AS items(item)

主要是我访问父节点失败,我尝试使用'../local-name()',但是local-name()需要XPath来显示名称.之后显示父节点名称变得容易.

Mainly I failed to access parent node, I tried to user '../local-name()', but local-name() requires XPath to diplay name. After that show parents node name becomes easy.

这篇关于T-SQL 将 XML 字段转换为多列数据集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆