首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SQL编辑XML,插入for-循环问题

从SQL编辑XML,插入for-循环问题
EN

Stack Overflow用户
提问于 2015-04-09 14:13:32
回答 2查看 565关注 0票数 1

我试图使用xQuery修改sql server表中包含的XML。此XML中的一个特定节点包含多个相同类型的节点。我要做的是插入一个节点元素,其中包含该节点作为整数的顺序。

这是最初的情况

代码语言:javascript
复制
DECLARE @xml XML= N'
<parentNode>
    <node>
    </node>
    <node>
    </node>
    <node>
    </node>
</parentNode>'

这就是我想要达到的

代码语言:javascript
复制
<parentNode>
   <node>
          <Number> 1 </Number>
   </node>
   <node>
          <Number> 2 </Number>
   </node>
   <node>
          <Number> 3 </Number>
   </node>
</parentNode>

我一直试图使用for $i in .返回计数(../*. << $i) +1的for-循环来完成这一操作,它给出了每个节点的编号,但是我没有插入数字。

对于如何实现(最好使用xQuery),有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-09 14:54:15

您可以首先获得节点数,然后使用“`XQUERY”插入多个子节点

代码语言:javascript
复制
DECLARE @xml XML= N'
<parentNode>
    <node>
    </node>
    <node>
    </node>
    <node>
    </node>
</parentNode>'

declare @nodes int = @xml.value('count(/parentNode/node)','INT')
declare @newnode XML
declare @nodeCount int =1
while @nodeCount <= @nodes
begin

set @newnode = ( select @nodeCount as 'Number' FOR XML PATH(''))
select @newnode
set @xml.modify('insert sql:variable("@newnode") into (/parentNode/node[sql:variable("@nodeCount")])[1]')
set @nodeCount = @nodeCount +1
end
select @xml
票数 2
EN

Stack Overflow用户

发布于 2015-04-09 14:40:49

代码语言:javascript
复制
DECLARE @xml XML= N'
<parentNode>
    <node>
    </node>
    <node>
    </node>
    <node>
    </node>
</parentNode>'

declare @cnt int=0
declare @counter int=1

select 
  @cnt=@xml.value('count(/parentNode/node)','int')

declare @newXml nvarchar(max)
set @newXml=N'<parentNode>'
while (@counter <= @cnt)
begin
set @newXml = @newXml + '<node><Number>'+cast(@counter as varchar(10)) +'</Number></node>'
set @counter=@counter+1
end
set @newXml=@newXml+'</parentNode>'
select convert(xml,@newXml)

输出:

代码语言:javascript
复制
<parentNode>
  <node>
    <Number>1</Number>
  </node>
  <node>
    <Number>2</Number>
  </node>
  <node>
    <Number>3</Number>
  </node>
</parentNode>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29540990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档