Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用TSQL从XML中删除具有特定值的节点_Sql Server_Xml_Tsql_Contains - Fatal编程技术网

Sql server 使用TSQL从XML中删除具有特定值的节点

Sql server 使用TSQL从XML中删除具有特定值的节点,sql-server,xml,tsql,contains,Sql Server,Xml,Tsql,Contains,我试图解析一段XML并删除包含某些值的节点。如果值是精确的,我知道如何删除它们,但我想使用“contains”之类的东西 这可以准确地删除: update @XML set data.modify('delete //Message[text() = "customer has deleted their account"]') 但我想删除“Message”节点仅包含文本的位置,类似于: update @XML set data.modify('delete //Message[contain

我试图解析一段XML并删除包含某些值的节点。如果值是精确的,我知道如何删除它们,但我想使用“contains”之类的东西

这可以准确地删除:

update @XML set data.modify('delete //Message[text() = "customer has deleted their account"]')
但我想删除“Message”节点仅包含文本的位置,类似于:

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 *'
试一试

删除
元素及其内容的步骤

update @XML set data.modify('delete //Message//text()[contains(.,"customer")]')
删除
元素的内容

这里的示例

declare@XML='1
aslkjflaksjflkasjfkljsd
opqiwuerl;卡斯德夫卡沃普
'
声明@Guid varchar(30)='aslkjflaksjflkasjfkljsd'
set@XML.modify('delete/Root/Sub/Record[Guid=sql:variable(“@Guid”)]”)
参考文献

省长。我做了一些非常相似的事情,但这是一个2步。删除节点的内容,然后删除空节点。这更优雅。
update @XML set data.modify('delete //Message//text()[contains(.,"customer")]')
    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")]')