stored-procedures - utiliza - ver donde se usa una tabla sql
Sybase: obtener una lista de procedimientos almacenados usando una tabla particular (5)
Tengo 500 procedimientos almacenados en una base de datos Sybase. Usando SQL, ¿puedo obtener una lista de todos los procedimientos almacenados que están usando una tabla particular, digamos tbl_books
?
El uso de syscomments como este dejará de funcionar si hay otro nombre de tabla decir tbl_books_new. Una mejor manera sería usar 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''
¿Qué tal algo así como:
select proc_name from sysprocedures where proc_defn like "%tbl_books%"
Usa algo como esto:
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%''
Recuerde que esa columna de texto en syscomments es varchar (255), por lo que un procedimiento grande puede constar de muchas líneas en syscomments, por lo tanto, las selecciones anteriores no encontrarán el nombre del procedimiento si el nombre de la tabla que está buscando se ha dividido en 2 filas de texto en syscomments.
Sugiero la siguiente selección, que manejará el caso anterior:
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
- felicitaciones por esto va al creador de ASEisql
Inicialmente probaría sp_depends
.
Syntax: sp_depends objname[, column_name]
Para objname
puede proporcionar cualquier nombre de objeto, por ejemplo, una tabla, vista o sproc.