0

您好我一直在寻找一种更新在 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>

干杯

4

1 回答 1

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()一次只能修改一个单例,不能修改一整套节点。

于 2013-04-11T11:00:36.570 回答