11

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 *'
4

2 に答える 2

21

試す

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

于 2013-02-25T18:28:17.017 に答える
6
    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")]')

参照 https://dba.stackexchange.com/questions/40039/how-to-return-xml-node-ordinal-or-delete-node-based-on-element-value

于 2017-01-12T11:11:11.520 に答える