将xml列拆分为多个列

时间:2015-05-29 01:58:35

标签: sql sql-server xml xml-parsing

我需要使用sql语句将列拆分为多个列。 此列在“dbo.ItemsEbay”表中保存为“ItemSpecifics”

以下是ItemSpecifics列中一条xml记录的示例:

 <SelectedValues haveDefaultsBeenSet="true">
<SelectedValue><Name>Consignment Status</Name><Value>False</Value></SelectedValue>
<SelectedValue><Name>Salesperson</Name><Value>'Motya'</Value></SelectedValue>
 <SelectedValue><Name>Last Cycle Counted</Name><Value>1/1/1990</Value></SelectedValue>
<SelectedValue><Name>CycleCountError</Name><Value>No</Value></SelectedValue>
</SelectedValues>

查询的输出应该有四列格式如下:

ConsimgentStatus --Boolean

Salesperson --String

最后一次周期计算 - 日期

CycleCountError - 串

1 个答案:

答案 0 :(得分:2)

查看SQL Server XML方法value()

SELECT 
    i.ItemSpecifics.value('(/*/SelectedValue[Name="Consignment Status"]/Value)[1]', 'bit') 
            as ConsimgentStatus
    , i.ItemSpecifics.value('(/*/SelectedValue[Name="Salesperson"]/Value)[1]', 'varchar(500)') 
            as Salesperson
    , i.ItemSpecifics.value('(/*/SelectedValue[Name="Last Cycle Counted"]/Value)[1]', 'date') 
            as LastCycleCounted
    , i.ItemSpecifics.value('(/*/SelectedValue[Name="CycleCountError"]/Value)[1]', 'varchar(500)') 
            as CycleCountError
FROM dbo.ItemsEbay i

<强> Demo

旁注:上面使用了/*/而不是/SelectedValues/只是为了缩短查询,因此它在单行中可见。您也可以使用//,但查询效率会低一些。