Sybase: получить список хранимых процедур, используя конкретную таблицу - PullRequest
11 голосов
/ 30 июня 2010

У меня есть 500 хранимых процедур в базе данных Sybase. Используя SQL, могу ли я получить список всех хранимых процедур, которые используют конкретную таблицу, скажем tbl_books?

Ответы [ 5 ]

23 голосов
/ 30 июня 2010

Используйте что-то вроде этого:

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%'
3 голосов
/ 30 июня 2010

Сначала я бы попробовал sp_depends.

Syntax: sp_depends objname[, column_name]

. Для objname вы можете указать любое имя объекта, например, таблицу, представление или sproc.

2 голосов
/ 15 ноября 2012

Использование 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'
0 голосов
/ 30 декабря 2011

Пожалуйста, помните, что текстовый столбец в syscomments - это varchar (255), поэтому одна большая процедура может состоять из многих строк в syscomments, таким образом, вышеприведенный выбор не найдет имя процедуры, если имя таблицы, которую вы ищете,был разбит на 2 строки текста в syscomments.

Я предлагаю следующий выбор, который будет обрабатывать описанный выше случай:

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

0 голосов
/ 30 июня 2010

Как насчет чего-то вроде:

select proc_name from sysprocedures where proc_defn like "%tbl_books%"
...