这是我的代码:
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
请指出我的错误在哪里......
答案 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。
另一个答案给出了如何解决这个问题的方法。