我有一个包含许多列的表,其中一列是XML列。其中包含的数据是一个时间点快照,在该过程应该再次运行的6个月内,如果XML中包含的派生值发生了变化,则查询数据库。
我的查询工作正常但是我需要更新快照值,这将阻止查询再过6个月再次运行。
该表的格式与此类似。
History Table (
HistoryID int
, RecordID int
, TypeID int
, Data xml
)
数据列包含类似
的内容<Data>
<Number>346</Number>
<Requery>1</Requery>
</Data>
我需要做的是更新与HistoryID相关的数据元素 HistoryID,Requery 346346,1 346347,0
如果我在vb.Net中处理这个问题,那将会非常简单,但它似乎比在SQL中应该更复杂。 处理它的最佳方法是什么?
答案 0 :(得分:0)
我将源代码查询转储到包含标识列的临时表中。
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
这不是一个简单的解决方案,但它可以满足我的需求。