如何将XML值分解为MSSQL中的列?

时间:2018-06-07 10:18:06

标签: sql sql-server xml sql-server-2008 xml-parsing

这是我的代码:

DECLARE @xml XML
set @xml ='
<settings>
<value>1306</value>
<value>1307</value>
<value>1310</value>
</settings>'


select tabl.col.value ('value[1]','int')
from @xml.nodes ('/settings') tabl (col)
cross apply tabl.col.nodes ('value') as tabl1 (col1)

收到的输出:

1306

1306

1306

例外输出:

1306

1307

1310

请指出我的错误在哪里......

2 个答案:

答案 0 :(得分:2)

您不需要使用select tabl.col.value ('.','int') from @xml.nodes ('settings/value') tabl (col); ,您可以直接将其表示为

{{1}}

答案 1 :(得分:1)

  

请指出我的错误在哪里......

select tabl.col.value ('value[1]','int')
from @xml.nodes ('/settings') tabl (col)
cross apply tabl.col.nodes ('value') as tabl1 (col1)

您的错误:from @xml.nodes()没有提取重复元素<value>,而是要求<settings>。有一个单一的元素。现在,您选择第一个值(&#39;值[1]&#39;)。这将返回1行&#34; 1306&#34;。

但是,您添加cross apply,其 relativ 引用<value>以下<settings>。这确实会返回3行,但结果不会在任何地方使用。

因此,您将获得每行重复的单个结果1306。

另一个答案给出了如何解决这个问题的方法。

相关问题