有没有办法在SQL Server中的xml中替换多次出现的标记值?
我需要检查特定标记(FirstName)并将其所有值替换为另一个。
这是我的示例xml:
<Root>
<Patient>
<FirstName>Something</FirstName>
<MiddleInitial>W</MiddleInitial>
<LastName>West</LastName>
</Patient>
<Patient>
<FirstName>Another</FirstName>
<MiddleInitial>E</MiddleInitial>
<LastName>East</LastName>
</Patient>
</Root>
我想要的输出是:
<Root>
<Patient>
<FirstName>TEST</FirstName>
<MiddleInitial>W</MiddleInitial>
<LastName>West</LastName>
</Patient>
<Patient>
<FirstName>TEST</FirstName>
<MiddleInitial>E</MiddleInitial>
<LastName>East</LastName>
</Patient>
</Root>
我目前有这个修改语句,它将改变第一次出现,但忽略了下一个&#39; FirstName&#39;出现的标签:
SET @x.modify('
replace value of
(/Root/Patient/FirstName[1]/text())[1]
with "TEST"
');
这给了我这个:
<Root>
<Patient>
<FirstName>TEST</FirstName>
<MiddleInitial>W</MiddleInitial>
<LastName>West</LastName>
</Patient>
<Patient>
<FirstName>Another</FirstName>
<MiddleInitial>E</MiddleInitial>
<LastName>East</LastName>
</Patient>
</Root>
我尝试将其抛入while循环,在路径存在时执行,但看起来我只是创建了一个无限循环:
WHILE @x.exist('(/Root/Patient/FirstName[1]/text())[1]') = 1
对于解决这个问题的任何想法都将非常感激!
答案 0 :(得分:1)
我确信有更好的方法,但一种方法是
WHILE @x.exist('(/Root/Patient/FirstName[text() != "TEST"])') = 1
SET @x.modify('
replace value of
(/Root/Patient/FirstName[text() != "TEST"][1]/text())[1]
with "TEST"
');