У меня есть 500 хранимых процедур в базе данных Sybase. Используя SQL, могу ли я получить список всех хранимых процедур, которые используют конкретную таблицу, скажем tbl_books
?
Sybase: получить список хранимых процедур с использованием определенной таблицы
Ответ 1
Используйте что-то вроде этого:
Select distinct sysobjects.name
, case
when sysobjects.type = 'TR' then 'TRIGGER'
when sysobjects.type = 'P' then 'PROCEDURE'
when sysobjects.type = 'V' then 'VIEW'
else 'UNKNOWN' end type
from sysobjects inner join syscomments
on sysobjects.id = syscomments.id
where syscomments.text like '%tbl_books%'
Ответ 2
Сначала я попробую sp_depends
.
Syntax: sp_depends objname[, column_name]
Для objname
вы можете указать любое имя объекта, например таблицу, представление или sproc.
Ответ 3
Использование syscomments, как для этого, перестанет работать, если есть другое имя табуляции tbl_books_new. Лучшим способом было бы использовать sysdepends
select so1.name from
sysobjects so1, sysobjects so2, sysdepends sd
where so1.id = sd.id
and so2.id = sd.depid
and so2.name = 'tbl_books'
and so1.type = 'P'
Ответ 4
Как насчет чего-то по строкам:
select proc_name from sysprocedures where proc_defn like "%tbl_books%"
Ответ 5
Пожалуйста, помните, что текстовый столбец в syscomments является varchar (255), поэтому одна большая процедура может состоять из многих строк в syscomments, поэтому вышеприведенные элементы выбора не найдут имя процедуры, если имя таблицы, которую вы ищете, был разбит на 2 строки текста в syscomments.
Я предлагаю следующий select, который будет обрабатывать описанный выше случай:
declare @text varchar(100)
select @text = "%tbl_books%"
select distinct o.name object
from sysobjects o,
syscomments c
where o.id=c.id
and o.type='P'
and (c.text like @text
or exists(
select 1 from syscomments c2
where c.id=c2.id
and c.colid+1=c2.colid
and right(c.text,100)+ substring(c2.text, 1, 100) like @text
)
)
order by 1
- это то, что нужно сделать для создателя ASEisql