Sql 根据是否存在,将元素更新或插入到xml列中

Sql 根据是否存在,将元素更新或插入到xml列中,sql,xml,sql-server-2008,xpath,sql-update,Sql,Xml,Sql Server 2008,Xpath,Sql Update,我试图编写一个update语句,检查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 我走错方向了吗 xml数据类型的modify()

我试图编写一个update语句,检查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
我走错方向了吗

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;

感谢您对修改方法的澄清。这是一个很好的选择。您认为哪种方法更有效,或者将列选择到变量中,然后使用if语句调用正确的update语句?首先执行insert,然后对整个表执行replace,省去WHERE子句并节省一次exist检查的成本,可能会更快。我认为你必须编写一个过程才能使用IF-THEN-ELSE逻辑。我最终使用IF语句,主要是出于个人偏好,但这是一个完全可以接受的答案。