您好我一直在寻找一种更新sql中生成的xml的方法来添加子节点的数量,并使用SQL将计数添加到父节点
我尝试过各种各样的工作
SET @xml.modify
(
'insert attribute TrCount {count(/XML/Acs/Act/Trs/Tr)} into (./XML/Acts/Act/Trs)'
);
<XML>
<Id>12</Id>
<DateCreated>2013-04-11</DateCreated>
<Acts AccountCount="4">
<Act RowID="1>
<Trs>
<Tr RowID="1" />
</Trs>
</Act>
<Act RowID="2">
<Trs>
<Tr RowID="1" />
<Tr RowID="2" />
</Trs>
</Act>
<Act RowID="3">
<Trs>
<Tr RowID="1"/>
</Trs>
</Act>
<Act RowID="4">
<Trs>
<Tr RowID="1" />
<Tr RowID="2" />
<Tr RowID="3" />
<Tr RowID="4" />
<Tr RowID="5" />
<Tr RowID="6" />
<Tr RowID="7" />
</Trs>
</Act>
</Acts>
</XML>
上面是一个示例,我已经让它给了我一个内部的计数,但我似乎无法计算每个内的每个,所以结果看起来像
<Act RowID="1>
<Trs Trcount="1">
<Tr RowID="1" />
</Trs>
</Act>
<Act RowID="2">
<Trs Trcount="2">
<Tr RowID="1" />
<Tr RowID="2" />
</Trs>
</Act>
<Act RowID="3">
<Trs Trcount="1">
<Tr RowID="1"/>
</Trs>
</Act>
<Act RowID="4">
<Trs Trcount="7">
<Tr RowID="1" />
<Tr RowID="2" />
<Tr RowID="3" />
<Tr RowID="4" />
<Tr RowID="5" />
<Tr RowID="6" />
<Tr RowID="7" />
</Trs>
干杯
答案 0 :(得分:1)
尝试这样的事情,假设每个Act
只包含一个Trs
:
declare @count int = @xml.value('count(/XML/Acts/Act)', 'int'),
@counter int = 1;
while (@counter <= @count)
begin
SET @xml.modify ('insert attribute TrCount {count(/XML/Acts/Act[sql:variable("@counter")]/Trs/Tr)} into (/XML/Acts/Act[sql:variable("@counter")]/Trs)[1]');
set @counter += 1;
end
insert()
只能一次修改单例,而不能修改整组节点。