使用同一行中的另一个列值更新SQL Server 2005中的XML节点(在XML列中)

时间:2012-04-22 19:24:59

标签: sql-server xml

我的临时表包含XML列(XMLColumn)和VARCHAR列(ABCColumn)。

我正在尝试将XMLColumn中特定XML节点的值替换为同一行ABCColumn中的值。我需要对临时表中的每一行执行此操作。如果没有一个游标可以保存每次获取的替换值,是否可以这样做?

我尝试使用

对临时表进行更新
XmlColumn.modify('replace value of ... with ...')

但在这种情况下我没有变量。我需要获取XYZColumn的值并将其用作替换值。我见过的每个例子都使用变量或硬编码值 - 而不是同一行的列值。

另外,我正在使用SQL Server 2005.有没有人有任何想法?

2 个答案:

答案 0 :(得分:3)

编辑:我投了RBarryYoung的答案,改用它!

我能想到的唯一方法就是光标:

declare cur_t cursor for (select id, val_col from YourTable)
declare @id int
declare @val int
open cur_t

fetch cur_t into @id, @val
while @@fetch_status = 0
    begin
    update  YourTable
    set     xml_col.modify(
        'replace value of (/root/val/text())[1] with sql:variable("@val")')
    where   id = @id
    fetch cur_t into @id, @val
    end  

close cur_t
deallocate cur_t

Example at SQL Fiddle.

答案 1 :(得分:3)

喜欢这个:

UPDATE  YourTable
SET     xml_col.modify(
    'replace value of (/root/val/text())[1] with sql:column("val_col")'
    )

(感谢Andromar;我刚刚编辑了他的答案并使用了他的SQLFiddle,(也适用于这个。)