¿Cómo puedo obtener una lista de las tablas afectadas por un conjunto de procedimientos almacenados?
-
02-07-2019 - |
Pregunta
Tengo una enorme base de datos con alrededor de 100 tablas y unos 250 procedimientos almacenados.Quiero saber la lista de las tablas afectadas por un subconjunto de los procedimientos almacenados.Por ejemplo, tengo una lista de 50 procedimientos almacenados, de los 250, y quiero saber la lista de tablas que serán afectados por estos 50 procedimientos almacenados.¿Hay alguna forma fácil de hacer esto, aparte de la lectura de todos los procedimientos almacenados y encontrar la lista de tablas manualmente?
PS:Estoy utilizando SQL Server 2000 y SQL Server 2005 este tipo de cliente.
Solución
Esta sería la consulta de SQL Server:
SELECT
[NAME]
FROM
sysobjects
WHERE
xType = 'U' AND --specifies a user table object
id in
(
SELECT
sd.depid
FROM
sysobjects so,
sysdepends sd
WHERE
so.name = 'NameOfStoredProcedure' AND
sd.id = so.id
)
Espero que esto ayude a alguien.
Otros consejos
sp_depends 'StoredProcName' devolverá el nombre del objeto y el tipo de objeto que el procedimiento almacenado depende.
EDITAR: Me gusta @KG respuesta mejor.Más flexible en mi humilde opinión.
Yo lo haría de esta manera en SQL 2005 (quite el comentario de la "Y" de la línea si sólo lo quieren para un determinado proc):
SELECT
[Proc] = SCHEMA_NAME(p.schema_id) + '.' + p.name,
[Table] = SCHEMA_NAME(t.schema_id) + '.' + t.name,
[Column] = c.name,
d.is_selected,
d.is_updated
FROM sys.procedures p
INNER JOIN sys.sql_dependencies d
ON d.object_id = p.object_id
AND d.class IN (0,1)
INNER JOIN sys.tables t
ON t.object_id = d.referenced_major_id
INNER JOIN sys.columns c
ON c.object_id = t.object_id
AND c.column_id = d.referenced_minor_id
WHERE p.type IN ('P')
-- AND p.object_id = OBJECT_ID('MyProc')
ORDER BY
1, 2, 3
Uno muy invasiva opción sería conseguir un duplicado de la base de datos y establecer un disparo en cada tabla los registros que algo sucedió.A continuación, ejecute todos los SP.Si usted no puede hacer un montón de mods para la DB que no funcionan
También, asegúrese de agregar el registro a la existente desencadena en lugar de reemplazarlos con el registro si usted también desea tablas que el SP del efecto a través de disparadores.