从查询更新XML列

从查询更新XML列,xml,sql-server-2008,Xml,Sql Server 2008,我有一个表,它包含许多列,其中一列是XML列。其中包含的数据是一个时间点快照,如果XML中包含的派生值发生了更改,则在6个月后该进程应该再次运行并查询数据库 我已经让查询正常工作,但是我需要更新快照值,这将在接下来的6个月内停止再次运行查询 表格的格式与此相似 History Table ( HistoryID int , RecordID int , TypeID int , Data xml ) 数据列包含如下内容 <Data> <Number>346</Nu

我有一个表,它包含许多列,其中一列是XML列。其中包含的数据是一个时间点快照,如果XML中包含的派生值发生了更改,则在6个月后该进程应该再次运行并查询数据库

我已经让查询正常工作,但是我需要更新快照值,这将在接下来的6个月内停止再次运行查询

表格的格式与此相似

History Table (
HistoryID int
, RecordID int
, TypeID int
, Data xml
)
数据列包含如下内容

<Data>
<Number>346</Number>
<Requery>1</Requery>
</Data>

346
1.
我需要做的是更新与HistoryID相关的数据元素 历史ID,重新查询 346346, 1 346347,0

如果我在vb.Net中处理这个问题,它将相当简单,但是它似乎比SQL中的更复杂。
最好的处理方法是什么?

我将源查询转储到一个包含标识列的临时表中

Declare @X table ( 
ID Int identity(1,1)
, HistoryID Int
, DueDate Date
, Number Varchar(255)
, UniqueXML xml
)
然后,我使用while循环临时存储我想要更改的数据

Declare @m, @I as int

Select @m = Count(*), @I = 1 from @x
While @I <= @m
Begin
Declare @DueDate Date
Select @DueDate = Duedate from @x where ID = @I

                if @Date  is not null
                Begin
                Update @x
                Set  UniqueXML.modify('
                replace value of (/Date/text())[1] 
                with sql:variable("@Date")')
                Where ID = @i
                End

End
将@m、@I声明为int
从@x中选择@m=Count(*),@I=1
而@I