2011-05-03 28 views
5

ben istiyorum Aşağıdaki örnekte XQueryistediğim 2005

kullanarak SQL Server 2005'te bir XML düğümün metnin bir bölümünü güncelleyebilirsiniz bilmek "çok" ile "mükemmel" sözcüğü yerine

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 

değiştirmek istediğiniz bu kelime değil bir XML etiketin içindekiler olduğundan Herhangi bir yardım

cevap

2

mutluluk duyacağız - ama bu içeriğin sadece bir parçası - Sadece metin tabanlı değiştirme seçeneklerini kontrol etmek isteyebilirsiniz.

Böyle bir şey olsaydı çalışacak:

declare @xml as xml 

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

Ardından, XML ulaşmak ve başka bir şeyle <rating>....</rating> içeriğini değiştirmek olabilir: bu haliyle

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 

Ama şimdi, muhtemelen <info>'un metin içeriğini kapmak ve üzerinde bir metinsel değişiklik yapmak zorundasınız:

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 
+0

Peki ya bilgi etiketinin içeriği daha büyükse varchar (1000), daha çok bir nvarchar (maks) gibi, bu durumla nasıl baş edersiniz? (yani: bilgi içeriği bir html bloğudur ve html bloğundaki bir değeri veritabanından değiştirirsiniz) – Peter

+0

@peter: içerik gerçekten bir XML etiketinin (veya XML özniteliğinin) tam içeriği olmadığı sürece, Bence bu yaklaşım zaten kötü. Bunu, SQL Server'ın içinde değil, bu verileri kullanarak bir uygulamada yapardım. Tam bir XML etiketinin içeriğini yeni bir içerikle değiştirebiliyorsanız, bu yaklaşım benim görüşüme göre tavsiye edilir. –