0

当我尝试删除不在 XML 模式中的 XML 元素时,我得到

消息 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”语句?

4

1 回答 1

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
于 2012-05-14T21:57:14.677 回答