检查当前库下内容含有指定字符的所有存储过程

由于配置表改变了,要对当前数据库下所有SP进行检查,对于有引用这个表的SP都要作相应的改变,如果是一个一个SP查询,那工作量太大了,所以写了一个SP,对包含有对该表引用的SP都列出来。

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:jim.yang

-- Create date: 2009-9-2

-- Description:检查当前库下内容含有指定字符的所有存储过程

-- #p_procedure_searchStr 'sms_5'

-- =============================================

ALTER PROCEDURE #p_procedure_searchStr

    @str varchar(100)

AS

BEGIN

    create table #t1(name varchar(100),text varchar(8000))

    create table #t2(text varchar(8000))

    

    --得到库所有的sp

    select  identity(int,1,1) autoid,name into #proc 

    from sys.Procedures

    where type='P'

    



    declare @autoid int

    set @autoid=1

    declare @spName varchar(1000)



    --循环得到sp的内容文本

    declare @sql nvarchar(4000)

    while @autoid>0 begin

        

        truncate table #t2

        

        select @spName=name from #proc where autoid=@autoid

        set  @sql='sp_helpText ['+@spName+']'

        

        insert into #t2(text)

        execute(@sql)

        

        insert into #t1(name,text)

        select @spName,text from #t2

        where text like '%'+@str+'%'

        

        

        set @autoid=@autoid+1

        

        if not exists(select * from #proc where autoid=@autoid) 

            set @autoid=0

            

    end

    

    select * from #t1

    

    drop table #t1,#t2,#proc

END

GO

你可能感兴趣的:(存储过程)