Technical Article

Find and REMOVE string from stored procedures

,

This script extends the "Find strings in text of stored procedures" Script by LiviuB and and now finds the
string and removes it.
You may modify script to just comment out the text.
This script removes the text (in this case 'set dateformat dmy') from all non-system stored procedures in a database.
Modify the variable @searchstring to contain the text you want removed.
It does so by modifying the system table : syscomments.
It then marks the stored procedures for recompilation.

This is an extension of the "Find strings in text of stored procedures" Script by LiviuB found at
http://sqlservercentral.com/scripts/contributions/1240.asp
Therefore I would like to acknowledge the basis.

Note: Ensure the stored procedures are fine after running the script.

/*
Description:
This script extends the "Find strings in text of stored procedures" Script by LiviuB and and now finds the
string and removes it. 
You may modify script to just comment out the text but do so at your own risk.
This script removes the text (in this case 'set dateformat dmy') from all non-system stored procedures in a database.
Modify the variable @searchstring to contain the text you want removed.
It does so by modifying the system table : syscomments.
It then marks the stored procedures for recompilation.

This is an extension of the "Find strings in text of stored procedures" Script by LiviuB found at
http://sqlservercentral.com/scripts/contributions/1240.asp
Therefore I would like to acknowledge the basis.

Note: Ensure the stored procedures are fine after running the script.

Patti Mwasi pmwasi@yahoo.com 13-10-2004
*/
set nocount on
declare @colid smallint,@letter int
declare @bintObjectID bigint,@i int
declare @objname varchar(100),@sqlstring varchar(500),@text varchar(8000),@text2 varchar(8000)
declare @searchString varchar(100) --modify this to your needs.

set @searchString = 'set dateformat dmy'
set @sqlstring = '
USE master
EXEC sp_configure ''allow updates'', ''1''
RECONFIGURE WITH OVERRIDE'
exec (@sqlstring)


if object_id('tblObjects') is not null
drop table tblObjects

create table tblObjects(
  ID bigint identity(1, 1) 
, ObjectID bigint not null
, ObjectName varchar(100) not null
, colid smallint
)

insert into tblObjects(ObjectID, ObjectName,colid )
select C.id, object_name(C.id),c.colid 
from syscomments as C
join sysobjects as O on O.id = C.id
and o.type = 'P'
where C.text like '%'+ @searchString +'%' -- Modify this statement to suit your needs.

--alter table tblObjects add constraint PK_Objects primary key (ObjectID)

declare curObj cursor 
for
select ObjectID,ObjectName,colid from tblObjects

open curObj

fetch next from curObj into @bintObjectID,@objname,@colid
while @@fetch_status = 0
begin
begin
select @text  = (convert(nvarchar(4000),case when ([status] & 2 = 2) then (uncompress([ctext])) else [ctext] end))
from syscomments where id = @bintObjectID and colid = @colid

select @text = (replace (@text,@searchString,''))
set @i = 0 
set @text2 = ''
while @i <= len(@text)
begin
select @letter = ASCII(SUBSTRING(@text, @i, 1))
if   @letter <> 0 
begin
select @text2 = @text2 + (SUBSTRING(@text, @i, 1))
end


set @i = @i + 1
end

update syscomments set [ctext] = convert(varbinary(8000),@text2)
where id = @bintObjectID and colid = @colid
EXEC sp_recompile @objname
end

fetch next from curObj into @bintObjectID,@objname,@colid
end

close curObj
deallocate curObj

if object_id('tblObjects') is not null
drop table tblObjects

set @sqlstring = '
USE master
EXEC sp_configure ''allow updates'', ''0''
RECONFIGURE WITH OVERRIDE'
exec (@sqlstring)
GO
print 'Complete.'

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating