Как получить список таблиц, на которые влияет набор хранимых процедур?
-
02-07-2019 - |
Вопрос
У меня огромная база данных, содержащая около 100 таблиц и около 250 хранимых процедур.Я хочу знать список таблиц, на которые влияет подмножество хранимых процедур.Например, у меня есть список из 50 хранимых процедур из 250, и я хочу знать список таблиц, на которые будут влиять эти 50 хранимых процедур.Есть ли какой-нибудь простой способ сделать это, кроме чтения всех хранимых процедур и поиска списка таблиц вручную?
ПС:Для этого я использую клиенты SQL Server 2000 и SQL Server 2005.
Решение
Это будет ваш запрос 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
)
Надеюсь, это кому-то поможет.
Другие советы
sp_dependents 'StoredProcName' вернет имя объекта и тип объекта, от которого зависит хранимая процедура.
РЕДАКТИРОВАТЬ: Мне больше нравится ответ @KG.Более гибкий, ИМХО.
Я бы сделал это следующим образом в SQL 2005 (раскомментируйте строку «И», если вам нужно ее только для определенного процесса):
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
Одним из очень инвазивных вариантов было бы получить дубликат базы данных и установить триггер для каждой таблицы, в которой регистрируется, что что-то произошло.Затем запустите все SP.Если вы не можете сделать много модов для БД, это не сработает.
Кроме того, обязательно добавьте ведение журнала к существующим триггерам, а не заменяйте его журналированием, если вам также нужны таблицы, на которые SP влияет через триггеры.