我有一个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
我怎样才能做到这一点?
非常感谢,
答案 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)
显然,这并没有针对更多图像进行扩展,但这是非规范化数据问题的一部分