вы можете получить список всех хранимых процедур, подобных этой
select distinct
o.name as procedure_name
from sys.sql_modules m
inner join sys.objects o ON m.object_id = o.object_id
where o.Type = 'P'
Но нет способа, которым sql server
может узнать, используете ли вы его или нет внутри вашего приложения VB.Таким образом, ваш единственный вариант - поиск по каждому имени процедуры в вашем исходном коде
Чтобы найти процедуры, которые вызываются внутри других процедур, вы можете использовать что-то вроде этого
select distinct
o.name AS Object_Name,
o.type_desc,
m.definition
from sys.sql_modules m
inner join sys.objects o ON m.object_id = o.object_id
where m.definition Like '%your procedure name%'
Но я боюсьвам придется вызывать этот запрос для каждой процедуры, найденной в первом запросе
EDIT
вы можете получить список всех хранимых процедур, которые вызываются внутри другой хранимой процедуры.процедура, перебирая список процедур с помощью курсора.Это не будет быстро, но может работать
В нем также будут перечислены все процедуры, которые вызываются из других объектов, например, триггеры
, это будет выглядеть примерно так
declare @t table (procname varchar(200), called_in varchar(200))
declare @ProcName varchar(200)
declare crProcs cursor local FAST_FORWARD READ_ONLY for
select distinct
o.name as procedure_name
from sys.sql_modules m
inner join sys.objects o ON m.object_id = o.object_id
where o.Type = 'P'
open crProcs
fetch next from crProcs into @ProcName
while @@FETCH_STATUS = 0
begin
insert into @t (procname, called_in)
select @ProcName,
o.name
from sys.sql_modules m
inner join sys.objects o ON m.object_id = o.object_id
where m.definition Like '%' + @ProcName + '%'
group by o.name
fetch next from crProcs into @ProcName
end
close crProcs
deallocate crProcs
select *
from @t t
where 1 < (select count(1) from @t t2 where t2.procname = t.procname )