2012-05-14 44 views
0

當我嘗試刪除不在XML模式的XML元素,我得到XML存在()刪除在TSQL

消息2260,級別16,狀態1,行13
的XQuery [ Table_name.Table_XML_field.exist()]:沒有名爲 'XML_element_name'

元素,儘管包裹在布爾

IF EXISTS (select 'x' 
from sys.xml_schema_collections xsc 
    inner join sys.xml_schema_elements xse on xsc.xml_collection_id = xse.xml_collection_id 
where 1 = 1 
and xse.is_qualified = 0 
and xsc.name = 'XML_schema_name' 
and xse.name = 'XML_element_name') 
BEGIN 

UPDATE Table_name 
SET Table_XML_field.modify(' delete (//XML_element_name)') 
WHERE Table_XML_field.exist('(//XML_element_name)[1]') = 1 

END 

的刪除我包裹德爾在布爾條件下,仍然會出現該錯誤。如果XML節點不存在,是否有其他方法可以不執行「UPDATE」語句?

回答

0

這是一個有點可怕,但你可以在EXEC包裝您的更新():

IF EXISTS (...8<...) 
BEGIN 

EXEC(' 
UPDATE Table_name 
SET Table_XML_field.modify('' delete (//XML_element_name)'') 
WHERE Table_XML_field.exist(''(//XML_element_name)[1]'') = 1 
') 
END