Удаление узлов с определенным значением из XML с помощью TSQL
Я пытаюсь разобрать часть XML и удалить узлы, содержащие определенные значения. Я знаю, как удалить их, если значение точное, но я хочу использовать что-то вроде "содержит".
это работает, чтобы удалить именно:
update @XML set data.modify('delete //Message[text() = "customer has deleted their account"]')
но я хочу удалить, где узел "сообщение" просто содержит текст, что-то вроде:
update @XML set data.modify('delete //Message[contains(text(), "customer")]')
однако это возвращает ошибку:
XQuery [@XML.data.modify()]: 'contains()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
2 ответов
попробовать
update @XML set data.modify('delete //Message[text()][contains(.,"customer")]')
удалить <message/>
элемент и его содержание
update @XML set data.modify('delete //Message//text()[contains(.,"customer")]')
удалить <message/>
содержимое элемента.
пример здесь http://msdn.microsoft.com/en-us/library/ms178026.aspx
declare @XML xml = '
<Root>
<Sub>
<Record>
<Guid>aslkjflaksjflkasjfkljsd</Guid>
</Record>
<Record>
<Guid>opqiwuerl;kasdlfkjawop</Guid>
</Record>
</Sub>
</Root>'
declare @Guid varchar(30) = 'aslkjflaksjflkasjfkljsd'
set @XML.modify('delete /Root/Sub/Record[Guid = sql:variable("@Guid")]')