2016-06-13 3 views
0

Я нахожусь в центре очистки некоторых серверов. Так в данный момент это мой сервер (извините за хромую диаграмму):Найти зависимость от любого db

DatabaseServer00 
-DatabaseA 
    -ViewA 
    -ViewB 
    -ViewC 
-DatabaseB 
-DatabaseC 

Мне нужно найти, если есть зр/Тригер/функция/и т.д. ... в DatabaseB/C, которая вызывает ViewA из DatabaseA.

Я знаю, что я могу найти зависимости в DatabaseA с этим sp_depends И я в настоящее время использую эту функцию для поиска в других БД

Declare @Query varchar(max) 
    SET @Query = 'SELECT DISTINCT o.name AS Object_Name,o.type_desc FROM 
    sys.sql_modules m INNER JOIN sys.objects o ON m.object_id=o.object_id 
    WHERE m.definition like ''%ViewA%''' 
    EXEC sp _MSforeachdb @Query 

Но .... Этот код здесь^не возвращает меня что ViewB зависит от ViewC

Так что я не из запросов для запуска. Заранее спасибо за вашу помощь.

+0

Не уверен, что если бы я получил вопрос , Вы хотите поймать вызовы между базами данных или любые запросы VIEW? –

+1

Не совсем понятно, с чем вы столкнулись. Надеюсь, у вас нет вложенных представлений, хотя в качестве производительности, если это ужасно. –

+0

* В настоящее время я использую это для поиска в другой БД * - Не ясно. Разве вы не используете 'sp_depends' в' DatabaseA', где находятся 'ViewB' и' ViewC'? – niksofteng

ответ

0

Посмотрите на Information Schema Views, они должны быть в состоянии помочь вам в большинстве случаев, за исключением тех триггеры, вы, вероятно, придется полагаться на sys.triggers

SELECT * FROM information_schema.routines ISR 
WHERE CHARINDEX('dbo.ViewA', ISR.ROUTINE_DEFINITION) > 0 

SELECT * FROM INFORMATION_SCHEMA.VIEWS ISW 
WHERE CHARINDEX('dbo.ViewA', ISW.VIEW_DEFINITION) > 0 

SELECT 
    DB_NAME() AS DatabasName 
    , so.name as TableName 
    , tr.name as TriggerName 
    , sc.text as TriggerText 
    FROM sys.triggers tr 
    INNER JOIN sys.objects so 
    ON tr.parent_id = so.object_id 
    INNER JOIN syscomments sc 
     ON sc.id = tr.object_id 
    WHERE CHARINDEX('dbo.ViewA', sc.text) > 0 
+0

Спасибо за помощь. Я выполняю запрос, который вы поделили со мной. но я не получаю никакого результата. Даже со всей декларацией DatabaseA.dbo.ViewA я ничего не получаю. Я делаю что-то неправильно. –

+0

Некоторые из них могут зависеть от соглашения об именах, используемых в определениях, т. Е. Я всегда использую имя_схемы_имя.объекта, но ваша база данных может использовать только имя_объекта (т. Е. ViewA, а не dbo.ViewA). Вы выполняете запросы по каждой базе данных по отдельности? – SqlOnly

+0

Да, я иду один за другим, но каждый набор данных пуст –