MSSQL从varchar列读取和拆分XML

时间:2014-03-26 13:42:41

标签: sql sql-server xml

我遇到了很多解决方案,但我仍然坚持这个问题。

因此,有一个包含这样的XML的列:

<Attributes>   <Map>     <entry key="DATA1" value="47317"/>     <entry key="DATA2" value="47316"/>     <entry key="DATA3" value="45972\47316\47317"/>  </Map> </Attributes>

我需要将它分成三列:DATA1,DATA2,DATA3。问题是有时DATA2元素根本不存在,所以我不能像

那样使用XQUERY
SELECT CAST(attributes as xml).value('(/Attributes/Map/entry/@key)[1]', 'varchar(260)') as p FROM sometable

因为如果我使用它来获取第二个元素,那么我可以捕获DATA3而不是DATA2。

最后一个目标是使用CREATE VIEW语句制作它的方式。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

SELECT CAST(attributes as xml).value('(/Attributes/Map/entry[@key="DATA1"]/@value)[1]', 'varchar(260)') as DATA1
    , CAST(attributes as xml).value('(/Attributes/Map/entry[@key="DATA2"]/@value)[1]', 'varchar(260)') as DATA2
    , CAST(attributes as xml).value('(/Attributes/Map/entry[@key="DATA3"]/@value)[1]', 'varchar(260)') as DATA3
FROM sometable