2008-11-18 12 views
10

Gibt es eine einfache Möglichkeit, Tabelle/gespeicherte Prozedur/Funktionsabhängigkeiten in SQL Server 2005+ zu verfolgen? Ich habe eine riesige Anwendung mit vielen Tabellen und noch mehr gespeicherten Prozeduren und Funktionen geerbt, die lang und miteinander verknüpft sind.SQL Server-Abhängigkeiten

Am Ende des Tages gibt es eine Möglichkeit, einen Abhängigkeitsbaum zu bauen? Idealerweise geht das, was ich suche, in beide Richtungen:

Für eine Tabelle/Prozedur - was hängt davon ab?: Zeigen Sie mir alle gespeicherten Prozeduren an, die eventuell darauf verweisen (idealerweise in einer Baumansicht, so dass Unterprozeduren zu den größeren Prozeduren verschachteln, die sie aufrufen)

Für eine Prozedur - worauf hängt die IT ab?: Zeigen Sie mir alle Prozeduren und Tabellen, die eine bestimmte Prozedur beim Ausführen berühren wird (oder könnte).

Es scheint, dass dieses Werkzeug nicht so schwer zu machen sein sollte und für die DB-Wartung im Allgemeinen unglaublich nützlich wäre. Kennt jemand so etwas? Wenn das nicht existiert, warum zum Teufel nicht?

Die integrierte Funktionalität in Management Studio ist nett, aber die Informationen scheinen nicht vollständig zu sein.

Antwort

11

Red Gate hat ein ziemlich nützliches Tool namens SQL Dependency Tracker. Wir haben es erfolgreich für die Art von Ergebnissen verwendet, die Sie erhalten möchten.

+0

schließlich um bekam die kostenlose Testversion zu verwenden - das ist ein großartiges Werkzeug. – Cory

2

Ich glaube nicht, dass es eine Liste mit garantierter Vollständigkeit ist, aber in Management Studio können Sie mit der rechten Maustaste auf eine Tabelle oder gespeicherte Prozedur klicken und die Option View Dependencies auswählen.

0

Die Systemtabelle, die versucht, Abhängigkeiten zu verfolgen, ist normalerweise falsch. Wenn Sie also eine Antwort erhalten, müssen Sie sie auf andere Weise bestätigen. Warum also?

Es gibt kommerzielle Produkte wie Redgate SQL Dependency Tracker.

Ein armer Entwickler wie ich, ich benutze SQL Digger, die frei ist. Wenn Sie in der DDL nach einem Objektnamen suchen, können Sie in der Regel herausfinden, welche Abhängigkeiten ersten Grades für ein Objekt vorhanden sind.

Die nächste Ebene der Abhängigkeitsverfolgung ist die Verfolgung, welche C# - oder VB.NET-Netzobjekte von einem Objekt in SQL abhängen, aber AFAIK, Werkzeuge existieren dafür außerhalb der globalen Suche nicht. Hier

2

ist eine Liste der Optionen, wenn Sie auf das Budget niedrig sind:

http://www.mssqltips.com/tip.asp?tip=1294

Sie können auch eine Spur und sehen, was das Management Studio tatsächlich tut, wenn Sie ‚Ansicht Abhängigkeiten‘ klicken. Greifen Sie diesen Code und sehen Sie, ob Sie ihn für Ihre eigene Verwendung ändern können. Dies ist eine gute Methode, um herauszufinden, wie Sie verschiedene Dinge automatisieren können, die Sie normalerweise über die Benutzeroberfläche ausführen.

+0

Wie würde man "diesen Code greifen"? – Cory

+1

Mit Profiler sollten Sie sehen können, welcher Code auf dem Server läuft. –

25

Hoffentlich bin ich nicht zu spät mit diesem:

Wenn Ihre SQL-Anmeldung Zugriff auf das sys-Schema in einer bestimmten Datenbank hat, können Sie die sys.dependencies Ansicht verwenden alle ein Objekt Abhängigkeit in einer finden Aufnahme:

Mit diesem Ausgangspunkt könnten Sie wahrscheinlich ein anständiges Werkzeug erstellen, um einen Abhängigkeitsbaum zu erstellen.Es gibt auch typspezifische Ansichten (z. B. sys.columns), die detailliertere Informationen zu jedem spezifischen Datenbankobjekttyp liefern; Diese könnten verwendet werden, um bei Bedarf Kontextinformationen zu einem Objekt bereitzustellen.

+0

Funktioniert das für SQL Server 2000? –

+0

Ich glaube, die Objektkatalogansichten, zu denen die Tabelle 'sys.objects' gehört, wurden in SQL 2005 eingeführt, aber eine ähnliche Abfrage kann mit den Ansichten des Informationsschemas geschrieben werden. Sie sind ein wenig komplizierter, aber Sie finden die Dokumentation dazu unter http://msdn.microsoft.com/en-us/library/aa933204(SQL.80).aspx –

+0

Sie können dies in Excel speichern und importieren mit [ Gephi] (http://gephi.org) (ein kostenloser und sehr fortgeschrittener Graph Visualizer) –

0

ich diese Lösung und seiner großen gefunden.

SELECT referencing_schema_name, referencing_entity_name, 
referencing_id, referencing_class_desc, is_caller_dependent 
FROM sys.dm_sql_referencing_entities ('dbo.udf_func', 'OBJECT'); 
0

Von MSDN:

SELECT * FROM sys.sql_expression_dependencies 
WHERE referenced_id = OBJECT_ID(N'Production.Product'); 

Wir können es schicker machen:

select 
I.name depending, I.xtype dependingtype, 
E.name depended, E.xtype dependedtype 
from sys.sql_expression_dependencies D 
left outer join sysobjects I on D.referencing_id = I.id 
left outer join sysobjects E on D.referenced_id = E.id 
where 1 = 1 
and (E.name = 'mytable' or I.name = 'mytable') -- customize this any way you want 
order by dependedtype, depended, dependingtype, depending