2013-03-26 56 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