我需要使用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 - 串
答案 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/
只是为了缩短查询,因此它在单行中可见。您也可以使用//
,但查询效率会低一些。