Как получить список таблиц, на которые влияет набор хранимых процедур? - PullRequest
2 голосов
/ 23 сентября 2008

У меня есть огромная база данных с около 100 таблицами и около 250 хранимых процедур. Я хочу знать список таблиц, на которые влияет подмножество хранимых процедур. Например, у меня есть список из 50 хранимых процедур из 250, и я хочу знать список таблиц, на которые будут влиять эти 50 хранимых процедур. Есть ли простой способ сделать это, кроме чтения всех хранимых процедур и поиска списка таблиц вручную?

PS: для этого я использую клиенты SQL Server 2000 и SQL Server 2005.

Ответы [ 4 ]

5 голосов
/ 23 сентября 2008

Это будет ваш запрос к 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
    )

Надеюсь, это кому-нибудь поможет.

1 голос
/ 23 сентября 2008

Я бы сделал это в 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
1 голос
/ 23 сентября 2008

sp_depends 'StoredProcName' вернет имя объекта и тип объекта, от которого зависит сохраненный процесс.

РЕДАКТИРОВАТЬ: Мне больше нравится ответ @ KG. Более гибкий ИМХО.

0 голосов
/ 23 сентября 2008

Один очень инвазивный вариант - получить дубликат базы данных и установить триггер для каждой таблицы, которая регистрирует, что что-то произошло. Затем запустите все SP. Если вы не можете сделать много модов для БД, которые не будут работать

Кроме того, обязательно добавьте ведение журнала в существующие триггеры, а не заменяйте их ведением журнала, если вам также нужны таблицы, на которые эффект SP влияет через триггеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...