venerdì 20 giugno 2008

Sostituzione stringhe in campi Text o nText

Problema: Come posso fare per sostituire una stringa con un'altra in un campo di tipo Text o nText?

Considerazioni: Se il campo fosse di tipo varchar o nvarchar il problema non si porrebbe, in quanto esiste in SqlServer una funzione (più in generale esiste in T-Sql) che lo fa in modo nativo: la funzione "Replace". Funzione che, però, non lavora sui campi text. Bisogna utilizzare un'altra funzione, che però ha un utilizzo più generico: UpdateText

Soluzione:
declare @TestoVecchio varchar(1000)
set @TestoVecchio = 'Vecchio'

declare curs cursor local fast_forward
for
select
    idriga,
    textptr(Colonna),
    charindex(@TestoVecchio, Colonna)-1
from
    Tabella
where
    Colonna
like
    '%' + @TestoVecchio +'%'


declare @Testonuovo varchar(1000)
set @Testonuovo = 'nuovo'

declare @txtlen int
set @txtlen = len(@TestoVecchio)


declare @ptr binary(16)
declare @pos int
declare @id int


open curs

fetch next from curs into @id, @ptr, @pos

while @@fetch_status = 0
begin
    updatetext Tabella.Colonna @ptr @pos @txtlen @Testonuovo

    fetch next from curs into @id, @ptr, @pos
end

close curs
deallocate curs

Note:
Tabella è la tabella di riferimento
Colonna è il campo in cui si deve modificare il testo
idriga è l'id della tabella (in questo caso è di tipo int, quindi la variabile @id è impostata come int, se fosse di tipo diverso basta cambiare la dichiarazione della variabile @id nel tipo corretto)

Nessun commento: