2010-01-10 92 views
1

我想在sql server(2005和2008)中将一个节点的值复制到另一个节点的值。 例如,如果XML数据的一个是如下SQL Server xml将一个节点的值复制到另一个节点

<Data> 
<Name></Name> 
<ShortName>Joe</ShortName> 
</Data> 

生成的XML应该是

<Data> 
<Name>Joe</Name> 
<ShortName>Joe</ShortName> 

update语句应该影响在表

感谢所有行任何帮助 谢谢

回答

2

您必须注意Silent XQuery failures

这种情况下的问题是XPath表达式(/ Data/Name/text())1返回空序列。 '名字'是一个空的元素(它没有孩子)。因此表达式(/ 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 
+0

绝佳的提示。我确实遇到过这个问题,但忘了在帖子中提到它。 – user55474 2010-01-11 03:17:01

+0

我很高兴你抓住了它。如果您发现它有用,请不要忘记接受这个答案。 – 2010-01-11 03:24:12

0

得到了解决方案 更新表设置col.modify(用(/ ShortName/text())[1]替换(/ Name/text())[1]的值)

+0

解决方案中存在错误。查看我的答案获取更多信息。 – 2010-01-11 01:22:37

相关问题