XQuery用变量修改

时间:2014-01-21 18:03:14

标签: tsql xquery

我有以下XML

<root>
   <business name="LM" id="1" total_pes="0">
   </business>
   <business name="KO" id="354" total_pes="0">
   </business>
   <business name="TUI" id="889" total_pes="0">
   </business>
</root>

我想用其他表tbl_logs的记录数更新total_pes属性:

id   |   log
1    |    A
1    |    A
1    |    A
354  |    A
354  |    A
889  |    A

我的输出XML是这样的:

 <root>
   <business name="LM" id="1" total_pes="3">
   </business>
   <business name="KO" id="354" total_pes="2">
   </business>
   <business name="TUI" id="889" total_pes="1">
   </business>
</root>

这就是我已经完成的事情:

DECLARE @total_pes_new int
DECLARE @ID INT

SET @ID = (SELECT TOP 1 ID FROM @IDS)

WHILE @ID IS NOT NULL
BEGIN
set @total_pes_new = (  SELECT COUNT(A.PES) FROM TBL A
                        WHERE A.ID = @ID)
SET @XML.modify('replace value of (/root/business[@id=sql:variable("@ID")]/@total_pes)[1] with sql:variable("@total_pes_new")')

SET @ID = (SELECT TOP 1 ID FROM @IDS WHERE ID > @ID)
END

我会遇到这个循环的问题。任何人都可以帮我做一个更好的解决方案吗?

韩国社交协会

1 个答案:

答案 0 :(得分:0)

如果您的XML位于XML数据库中,那么您还可以选择使用XQuery Update,请参阅http://www.w3.org/TR/xquery-update-10/