sql - resueltos - Lista de procedimientos almacenados de la tabla
procedimientos almacenados sql server (7)
Tengo una gran base de datos con cientos de tablas y procedimientos almacenados. Con SQL Server 2005, ¿cómo puedo obtener una lista de procedimientos almacenados que realizan una operación de inserción o actualización en una tabla determinada?
Esto parece funcionar:
select
so.name as [proc],
so2.name as [table],
sd.is_updated
from sysobjects so
inner join sys.sql_dependencies sd on so.id = sd.object_id
inner join sysobjects so2 on sd.referenced_major_id = so2.id
where so.xtype = ''p'' -- procedure
and is_updated = 1 -- proc updates table, or at least, I think that''s what this means
Podría intentar exportar todos sus procedimientos almacenados en un archivo de texto y luego usar una búsqueda simple.
Una técnica más avanzada sería usar una búsqueda regexp para encontrar todas las entradas SELECT FROM e INSERT FROM.
Si descargas sp_search_code del sitio web de Vyaskn, te permitirá encontrar cualquier texto dentro de los objetos de tu base de datos.
http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm
Use sys.dm_sql_referencing_entities
Tenga en cuenta que sp_depends está obsoleto.
sys.sql_dependencies
tiene una lista de entidades con dependencias, incluidas las tablas y columnas que un sproc incluye en las consultas. Consulte esta publicación para ver un ejemplo de una consulta que obtiene dependencias. El siguiente fragmento de código obtendrá una lista de dependencias de tabla / columna por procedimiento almacenado
select sp.name as sproc_name
,t.name as table_name
,c.name as column_name
from sys.sql_dependencies d
join sys.objects t
on t.object_id = d.referenced_major_id
join sys.objects sp
on sp.object_id = d.object_id
join sys.columns c
on c.object_id = t.object_id
and c.column_id = d.referenced_minor_id
where sp.type = ''P''
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = ''P''
AND (SC.Text LIKE ''%UPDATE%'' OR SC.Text LIKE ''%INSERT%'')
ORDER BY SO.Name
Este enlace se usó como un recurso para la búsqueda SP.
select
so.name,
sc.text
from
sysobjects so inner join syscomments sc on so.id = sc.id
where
sc.text like ''%INSERT INTO xyz%''
or sc.text like ''%UPDATE xyz%''
Esto le dará una lista de todos los contenidos del procedimiento almacenado con INSERT o UPDATE en ellos para una tabla en particular (obviamente puede modificar la consulta para adaptarla). Además, los procedimientos más largos se dividirán en varias filas en el conjunto de registros devuelto, por lo que es posible que deba realizar un análisis manual de los resultados.
Editar : consulta modificada para devolver el nombre de SP también. Además, tenga en cuenta que la consulta anterior devolverá cualquier UDF así como también SP.