从查询更新XML列

时间:2014-05-12 13:49:03

标签: xml sql-server-2008

我有一个包含许多列的表,其中一列是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中应该更复杂。 处理它的最佳方法是什么?

1 个答案:

答案 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

这不是一个简单的解决方案,但它可以满足我的需求。