Como faço para obter uma lista de tabelas afetadas por um conjunto de procedimentos armazenados?
-
02-07-2019 - |
Pergunta
Eu tenho um enorme banco de dados com cerca de 100 mesas e cerca de 250 procedimentos armazenados. Eu quero saber a lista de tabelas afetadas por um subconjunto de procedimentos armazenados. Por exemplo, eu tenho uma lista de 50 procedimentos armazenados, dos 250, e eu quero saber a lista de tabelas que serão afetados por estes 50 procedimentos armazenados. Existe alguma maneira fácil para fazer isso, diferente de ler todos os procedimentos armazenados e encontrar a lista de tabelas manualmente?
PS:. Estou usando o SQL Server 2000 e SQL Server 2005 clientes para esta ??p>
Solução
Esta seria sua consulta 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 isso ajude alguém.
Outras dicas
sp_depends 'StoredProcName' irá retornar o nome do objeto e tipo de objeto que o proc armazenados depende.
EDIT: Eu como @ resposta de KG melhor. IMHO mais flexível.
Eu faria isso dessa maneira no SQL 2005 (uncomment o "E" linha se só deseja-lo por um proc particular):
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
Uma opção muito invasiva seria a de obter um banco de dados duplicado e definir um gatilho em cada mesa que os logs que algo aconteceu. Em seguida, executar todo o SP de. Se você não pode fazer um monte de mods para o DB que não vai funcionar
Além disso, não se esqueça de adicionar o registro para gatilhos existentes em vez de substituí-los com o registo se você também quiser tabelas que o efeito do SP via triggers.