Tom*_*n89 8 xml t-sql sql-server contains
我正在尝试解析一段XML并删除包含某些值的节点.我知道如果值是精确的,如何删除它们,但我想使用类似"包含"的东西.
这可以准确删除:
update @XML set data.modify('delete //Message[text() = "customer has deleted their account"]')
Run Code Online (Sandbox Code Playgroud)
但是我想删除"Message"节点只包含文本的位置,例如:
update @XML set data.modify('delete //Message[contains(text(), "customer")]')
Run Code Online (Sandbox Code Playgroud)
但是这会返回错误:
XQuery [@XML.data.modify()]: 'contains()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
Run Code Online (Sandbox Code Playgroud)
Phi*_*hil 19
尝试
update @XML set data.modify('delete //Message[text()][contains(.,"customer")]')
Run Code Online (Sandbox Code Playgroud)
删除<message/>
元素及其内容
update @XML set data.modify('delete //Message//text()[contains(.,"customer")]')
Run Code Online (Sandbox Code Playgroud)
删除<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")]')
Run Code Online (Sandbox Code Playgroud)