我的临时表包含XML
列(XMLColumn
)和VARCHAR
列(ABCColumn
)。
我正在尝试将XMLColumn
中特定XML节点的值替换为同一行ABCColumn
中的值。我需要对临时表中的每一行执行此操作。如果没有一个游标可以保存每次获取的替换值,是否可以这样做?
我尝试使用
对临时表进行更新XmlColumn.modify('replace value of ... with ...')
但在这种情况下我没有变量。我需要获取XYZColumn
的值并将其用作替换值。我见过的每个例子都使用变量或硬编码值 - 而不是同一行的列值。
另外,我正在使用SQL Server 2005.有没有人有任何想法?
答案 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
答案 1 :(得分:3)
喜欢这个:
UPDATE YourTable
SET xml_col.modify(
'replace value of (/root/val/text())[1] with sql:column("val_col")'
)
(感谢Andromar;我刚刚编辑了他的答案并使用了他的SQLFiddle,(也适用于这个。)