2016-06-13 5 views
0

Ich bin in der Mitte der Reinigung einiger Server. Also zur Zeit das ist mein Server (sorry für die lahme Grafik):Finden Sie eine Abhängigkeit von Ansichten bei jeder db

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

Ich brauche zu finden, wenn es irgendeine sp/triger/Funktion/etc ... in DatabaseB/C, die ViewA von DatabaseA nennt.

Ich weiß, dass ich Abhängigkeiten in DatabaseA finde mit diesem sp_depends Und ich bin zur Zeit dieses in anderer DB

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 

Aber .... Diesen Code hier^nicht zurück, mich zu suchen, indem Sie dass ViewB von ViewC abhängt

So bin ich irgendwie aus Abfragen zu laufen. Vielen Dank im Voraus für Ihre Hilfe.

+0

nicht sicher, ob ich die Frage bekam . Möchten Sie Inter-Database-Aufrufe oder beliebige VIEW-Anfragen abfangen? –

+1

Es ist nicht wirklich klar, womit Sie ein Problem haben. Ich hoffe, Sie haben keine verschachtelten Ansichten, obwohl die Performance horrend ist. –

+0

* Ich verwende dies zur Suche in anderen DB * - Nicht klar. Sollten Sie 'sp_depends' nicht auf' DatabaseA' verwenden, wo sich 'ViewB' und' ViewC' befinden? – niksofteng

Antwort

0

Werfen Sie einen Blick auf die Information Schema Views, sollten sie in der Lage sein, Ihnen mit Ausnahme der Trigger in den meisten Fällen helfen, die Sie wahrscheinlich auf sys.triggers verlassen werden müssen

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

Danke für die Hilfe. Ich führe die Abfrage aus, die Sie mit mir geteilt haben. aber ich bekomme kein Ergebnis. Selbst mit der ganzen 'DatabaseA.dbo.ViewA' Deklaration bekomme ich nichts. Mache ich etwas falsch? –

+0

Einige davon hängen möglicherweise von der in den Definitionen verwendeten Namenskonvention ab, d. H. Ich verwende immer schema_name.object_name, aber Ihre Datenbank darf nur object_name (d. H. ViewA und nicht dbo.ViewA) verwenden. Führen Sie die Abfragen für jede Datenbank einzeln aus? – SqlOnly

+0

Ja, ich gehe eins nach dem anderen, aber jeder Datensatz ist leer –