我想在sql server(2005和2008)中将一个节点的值复制到另一个节点。 例如,如果其中一个xml数据如下
<Data>
<Name></Name>
<ShortName>Joe</ShortName>
</Data>
生成的xml应为
<Data>
<Name>Joe</Name>
<ShortName>Joe</ShortName>
update语句应该影响表中的所有行
感谢任何帮助 感谢
答案 0 :(得分:2)
您必须注意Silent XQuery failures。
这种情况下的问题是XPath表达式(/ Data / Name / text())1返回一个空序列。 'Name'是一个空元素(它没有子元素)。因此,表达式(/ Data / Name / text())1不指向任何现有节点。解决此问题的方法是在Name元素中插入一个新的文本节点,如下所示:
DECLARE @myDoc xml
SET @myDoc = '<Data>
<Name></Name>
<Name2>dd</Name2>
<ShortName>Joe</ShortName>
</Data>'
SELECT @myDoc
if (@myDoc.exist('(/Data/Name/text())[1]') = 1) BEGIN
set @myDoc.modify('
replace value of (/Data/Name/text())[1]
with (/Data/ShortName/text())[1]
')
end else begin
set @myDoc.modify('
insert (/Data/ShortName/text())[1]
as first into (/Data/Name)[1]
')
end
SELECT @myDoc
答案 1 :(得分:0)
得到了解决方案 更新表集col.modify(用/(ShortName / text())替换(/ Name / text())[1]的值[1])