2014-02-27 33 views
1

我在其中存储一个或多个值之内它是节点的表有一个简单的XML领域:T-SQL - 转换/移调多个XML节点值一列

<MultiSelect> 
    <ItemKey>38</ItemKey> 
    <ItemKey>36</ItemKey> 
</MultiSelect> 

如何在查询该领域这样的方式,这些值被提取到结果中的列?

源数据:

RowKey Format 
----------------- 
1   <MultiSelect><ItemKey>40</ItemKey></MultiSelect> 
2   <MultiSelect><ItemKey>40</ItemKey><ItemKey>36</ItemKey></MultiSelect> 

瞄准了结果:

RowKey ItemKey 
---------------- 
1  40 
2  40 
2  36 

我有接近的地方,我想用下面的查询,但是这仅仅是返回XML节点的名称而不是其中的值:

SELECT 
    [RowKey], 
    x.y.value('local-name(.)', 'varchar(max)') AS ItemKey 

FROM 
[tbl_MyDataTable] AS t 
    cross apply t.[Format].nodes('MultiSelect/ItemKey') x(y) 

结果:

RowKey ItemKey 
---------------- 
1  ItemKey 
2  ItemKey 
2  ItemKey 

任何建议greatfully收到!

回答

4

你接近 - 试试这个(因为这些都是INT数值,我建议你使用的XQuery INT):

SELECT 
    [RowKey], 
    x.y.value('(.)[1]', 'INT') AS ItemKey 
FROM 
    dbo.[tbl_MyDataTable] AS t 
CROSS APPLY 
    t.[Format].nodes('/MultiSelect/ItemKey') x(y) 

基本上,通过选择(.)[1],你选择的节点 - 不是它的名称(这是ItemKey

+2

完美!非常感谢 - 你是明星! – triplestones