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

从SQL编辑XML,插入for循环问题,sql,sql-server,xml,xquery,Sql,Sql Server,Xml,Xquery,我正在尝试使用xQuery修改sql server表中包含的XML。此XML中的一个特定节点包含多个相同类型的节点。我试图做的是插入一个节点元素,该元素包含该节点作为整数的顺序 这是最初的情况 DECLARE @xml XML= N' <parentNode> <node> </node> <node> </node> <node> </node> </par

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

这是最初的情况

DECLARE @xml XML= N'
<parentNode>
    <node>
    </node>
    <node>
    </node>
    <node>
    </node>
</parentNode>'
这就是我想要实现的

<parentNode>
   <node>
          <Number> 1 </Number>
   </node>
   <node>
          <Number> 2 </Number>
   </node>
   <node>
          <Number> 3 </Number>
   </node>
</parentNode>
我一直在尝试使用for循环来实现这一点,只花了$I in。返回计数../*[。 输出:


您可以首先使用“XQUERY”获取节点数并插入那么多子节点数

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

如果我错了,请纠正我,但此解决方案实际上根本不使用初始XML,而是从头开始构造它?这对我来说是不切实际的,因为实际的XML比给定的示例复杂得多。我也更愿意使用xQuery,而不是将XML视为字符串。
<parentNode>
  <node>
    <Number>1</Number>
  </node>
  <node>
    <Number>2</Number>
  </node>
  <node>
    <Number>3</Number>
  </node>
</parentNode>
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