T-SQL将XML字段转换为多列数据集

Ale*_*.P. 4 xml t-sql xquery

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

<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>
Run Code Online (Sandbox Code Playgroud)

我尝试做类似的事情(每次我在TSQL中使用XML时都感觉像是butthurt,所以我的代码错了):

;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)
Run Code Online (Sandbox Code Playgroud)

预期数据集:

ColumnName      Value
------------------------
propertyid      p1
propertyid      p2
propertyid      p3
propertyid      p4
complexid       c1
complexid       c2
complexid       c3
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到所需的结果?也许你可以推荐使用T-SQL + XML + XQuery解释和样本的好资源?

mar*_*c_s 5

尝试这样的事情:

;WITH source AS (
    SELECT CAST(@xmlstring AS XML) AS x
)
SELECT
    ColumnName = XTbl.Parent.value('local-name(.)', 'varchar(50)'),
    [Value] = XTbl2.ChildValues.value('(.)[1]', 'varchar(20)')
FROM source
CROSS APPLY
    x.nodes('/simple/*') AS XTbl(Parent)
CROSS APPLY
    XTbl.Parent.nodes('value') AS XTbl2(ChildValues)
Run Code Online (Sandbox Code Playgroud)

这对你有用吗?在我的情况下,我得到了所需的输出(使用帮助表).

请将此SQL Fiddle视为演示