2013-03-26 68 views
1

我试图编写一个更新语句来检查XML列中是否存在元素,如果它存在,则更新它的值。如果不是,则会将该值作为新元素插入。根据存在更新或插入xml列中的元素

喜欢的东西:

UPDATE Table 
SET xmlCol = 
case 
when xmlCol.exist('element') = 1 
then xmlCol.modify('replace value of blah') 
else xmlCol.modify('insert blah') 
end 
where whatever 

我要对这个错误的方式?

回答

3

xml数据类型的modify()方法只能用在UPDATE语句的SET子句中。

这可能是最简单的两个陈述。

UPDATE Table 
SET xmlCol.modify('replace value of /blah') 
WHERE xmlCol.exist('/blah') = 1; 

UPDATE Table 
SET xmlCol.modify('insert /blah') 
WHERE xmlCol.exist('/blah') = 0; 
+0

感谢您对修改方法的说明。这是一个很好的选择。你认为什么效率更高,或者将列选入变量,然后使用if语句来调用正确的更新语句? – Shawn 2013-03-26 19:56:40

+0

先执行插入操作可能会更快,然后在整个表上执行替换操作,使WHERE子句脱离并节省一个存在检查的开销。我想你必须编写一个程序才能使用你的IF THEN ELSE逻辑。 – Andrew 2013-03-26 20:08:35

+0

我最终使用if语句,主要是出于个人偏好,但这是一个完全可以接受的答案。 – Shawn 2013-03-27 15:29:42