5

xquery を使用して SQL Server 2005 の XML ノードのテキストの一部を更新する方法を知りたいです。

次の例では、「非常に」という単語を「優れた」に置き換えたいと思います

    declare @xml as xml
    set @xml = '<root><info>well hello this is a very good example</info></root>'
    declare @replacement as varchar(50)
    set @replacement = 'excellent'
    declare @search as varchar(50)
    set @search = 'very'

    set @xml.modify('replace value of (/root/info/text())[1]
                     with replace((/root/info/text())[1],sql:variable("@search"),sql:variable("@replacement"))'
        )
    select @xml

どんな助けでもいただければ幸いです

4

1 に答える 1

2

置換したいこの単語は XML タグの内容ではなく、その内容の一部にすぎないため、テキストベースの置換オプションを確認することをお勧めします。

次のようなものがあればうまくいきます:

declare @xml as xml

set @xml = '<root><info>well hello this is a <rating>very good</rating> example</info></root>'

次に、XML にアクセスして、の内容を別の<rating>....</rating>ものに置き換えることができます。

declare @replacement as varchar(50)
set @replacement = 'excellent'

set 
    @xml.modify('replace value of (/root/info/rating/text())[1]
                 with sql:variable("@replacement")')

select @xml

しかし、現状では、おそらく のテキスト コンテンツを取得して<info>、テキストを置換する必要があります。

DECLARE @xml as XML
SET @xml = '<root><info>well hello this is a very good example</info></root>'

DECLARE @newcontent VARCHAR(1000)
SELECT @newcontent = @xml.value('(/root/info/text())[1]', 'VARCHAR(1000)')

-- replace "very" with "excellent"    
SELECT @newcontent = REPLACE(@newcontent, 'very', 'excellent')

SET 
@xml.modify('replace value of (/root/info/text())[1]
                 with sql:variable("@newcontent")')

SELECT @xml
于 2011-05-03T12:31:46.830 に答える