2014-03-26 136 views
0

我遇到了很多解决方案,但我仍然坚持这个问题。MSSQL读取和从varchar列拆分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
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