从查询更新XML列
我有一个表,它包含许多列,其中一列是XML列。其中包含的数据是一个时间点快照,如果XML中包含的派生值发生了更改,则在6个月后该进程应该再次运行并查询数据库 我已经让查询正常工作,但是我需要更新快照值,这将在接下来的6个月内停止再次运行查询 表格的格式与此相似从查询更新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
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