home
Search and replace in text columns
Author Nigel Rivett
This code will replace all occurrances of a string in a text column in all rows
this uses the following table to test
Create table test (i int, j int, t text)
go
create unique index ix on test
(i, j)
go
it can be populated with test data as follows using the nr_AddTextRec stored procedure in this site
delete test
exec nr_AddTextRec 1, 1, 'asadf', 'I'
exec nr_AddTextRec 1, 1, 'jjjjj', 'A'
exec nr_AddTextRec 1, 1, 'kkkkksadf', 'A'
declare @t varchar(8000)
select @t = space(6000) + 'sadf'
exec nr_AddTextRec 1, 1, @t, 'A'
select @t = 'sadf'
exec nr_AddTextRec 1, 1, @t, 'A'
select @t = space(6000) + 'sadf'
exec nr_AddTextRec 1, 1, @t, 'A'
select @t = 'sadf'
exec nr_AddTextRec 1, 1, @t, 'A'
exec nr_AddTextRec 1, 2, 'asadf', 'I'
exec nr_AddTextRec 1, 2, 'jjjjj', 'A'
exec nr_AddTextRec 1, 2, 'kkkkksadf', 'A'
--declare @t varchar(8000)
select @t = space(6000) + 'sadf'
exec nr_AddTextRec 1, 2, @t, 'A'
select @t = 'sadf'
exec nr_AddTextRec 1, 2, @t, 'A'
select @t = space(6000) + 'sadf'
exec nr_AddTextRec 1, 2, @t, 'A'
select @t = 'sadf'
exec nr_AddTextRec 1, 2, @t, 'A'
The code to replace all occurrances of the following string in a column in all rows
declare @old varchar(20) ,
@new varchar(20)
select @old = 'adf' ,
@new = 'qsd'
-- pk for table
declare @i int ,
@j int
declare @ptr binary(16) ,
@offset int ,
@dellen int
select @dellen = len(@old)
select @ptr = 0
while @ptr is not null
begin
select @ptr = null
select top 1 @i = i, @j = j, @ptr = textptr(t)
from test
where t like '%' + @old + '%'
if @ptr is not null
begin
select @offset = 1
while @offset <> 0
begin
select @offset = patindex('%' + @old + '%', t) from test where i = @i and j = @j
select offset = @offset
if @offset > 0
begin
select @offset = @offset-1
updatetext test.t @ptr @offset @dellen @new
end
end
end
end
home