XML节点在SQL中排成一行

时间:2014-07-08 10:59:09

标签: sql sql-server xml

我有一个xml文件,我必须将它的值放在SQL的一行中。 我是SQL的新手,我无法找到任何解决方案。

我的XML文件是:

<Images xmlns="http://schemas.abc.com/2012/09/Image" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <Image>
          <Type>3</Type>
          <Code>928</Code>
     </Image>
     <Image>
          <Type>3</Type>
          <Code>925</Code>
     </Image>
     <Image>
          <Type>4</Type>
          <Code>925</Code>
     </Image>
</Images>

我可以查询

DECLARE @xml xml
SELECT @xml = BulkColumn FROM OPENROWSET(BULK 'C:\abc.xml', SINGLE_BLOB) as b;

;WITH XMLNAMESPACES(DEFAULT 'http://schemas.abc.com/2012/09/Image')
SELECT 
    im.value('(Type)[1]','int') AS 'ImageType', 
    im.value('(Code)[1]','int') AS 'ImageCode'
FROM 
    @xml.nodes('/Images/Image') AS X(im);   

我得到了一个结果

 ImageType     ImageCode                                      
 -----------------------                                        
   3             928
   3             925
   4             925  

但我希望得到像

Image1Type   Image1Code  Image2Type  Image2Code   Image3Type  Image3Code
-------------------------------------------------------------------------
   3           928         3         925            4            925

我怎样才能做到这一点?

非常感谢,

1 个答案:

答案 0 :(得分:0)

select 
    i.value('(Image[1]/Type)[1]','int') as Image1Type, 
    i.value('(Image[1]/Code)[1]','int') as Image1Code,
    i.value('(Image[2]/Type)[1]','int') as Image2Type, 
    i.value('(Image[2]/Code)[1]','int') as Image2Code,
    i.value('(Image[3]/Type)[1]','int') as Image3Type, 
    i.value('(Image[3]/Code)[1]','int') as Image3Code
from 
    @xml.nodes('/Images') x(i)

显然,这并没有针对更多图像进行扩展,但这是非规范化数据问题的一部分