2

我有一个带有XML列 ( XMLColumn) 和VARCHAR列 ( ABCColumn) 的临时表。

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

我尝试使用更新临时表

XmlColumn.modify('replace value of ... with ...')

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

另外,我正在使用 SQL Server 2005。有人有什么想法吗?

4

2 回答 2

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

SQL Fiddle 的示例。

于 2012-04-22T19:54:39.757 回答
3

像这样:

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

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

于 2012-04-22T20:09:16.710 回答