有时候调试sql, 有一连串的存储过程调用,这时候想知道某个存储过程被其它哪几个存储过程调用时,或者想知道某个表在哪些存储过程里被使用过; 这时候我们就需要一个工具,来检索存储过程的sql脚本;
编写存储代码 如下:
Declare @proc_name varchar(100)
Declare @fuction_name varchar(100)
Declare @seek_text varchar(100)
set @fuction_name='tableName' --要查找的字符串
set @seek_text=@fuction_name
Declare @sql varchar(8000)
Create table #proc_count(proc_name varchar(100),fuction_name varchar(100),[text] varchar(7000))
Create table #proc_text([text] varchar(8000))
Declare Cursor_Function cursor
for
select quotename(name) from sys.sysobjects where xtype='P'
Open Cursor_Function
Fetch next from Cursor_Function into @proc_name
While @@fetch_status=0
Begin
truncate table #proc_text
set @sql=''
set @sql=@sql+'
insert into #proc_text([text])
exec sp_helptext '+''''+@proc_name+''''+'
If exists(select 1 from #proc_text where [Text] like '+''''+'%'+@seek_text+'%'+''''+')
begin
insert into #proc_count(proc_name,fuction_name,[text])
select '+''''+@proc_name+''''+','+''''+@fuction_name+''''+','+'[text]
from #proc_text
where [Text] like '+''''+'%'+@seek_text+'%'+''''+'
end'
print @sql
exec (@sql)
Fetch next from Cursor_Function into @proc_name
end
close Cursor_Function
deallocate Cursor_Function
select distinct proc_name,fuction_name from #proc_count
order by proc_name
drop table #proc_count
drop table #proc_text
注:以上脚本在sqlserver中实现