Grundlegendes zu SQL-Abhängigkeiten

Neu: 05. Dezember 2005

SQL-Abhängigkeiten sind die Namensverweise, die in SQL-Ausdrücken verwendet werden, welche ein Objekt von einem anderen Objekt abhängig machen. Sie können alle Namensabhängigkeiten ermitteln, indem Sie die sys.sql_dependencies-Katalogsicht abfragen. Für jede Zeile in sys.sql_dependencies wird die Entität, auf die verwiesen wird (referenced_major_id), namentlich in einem permanenten SQL-Ausdruck des verweisenden Objekts angezeigt.

Die folgende Abbildung zeigt ein Beispiel für eine SQL-Abhängigkeit.

Darstellung einer SQL-Abhängigkeit

In der Abbildung sind zwei Objekte dargestellt: Prozedur X und Prozedur Y. Prozedur X enthält einen SQL-Ausdruck mit einem Namensverweis auf Prozedur Y. Prozedur X wird als das verweisende oder abhängige Objekt bezeichnet und Prozedur Y als das unabhängige Objekt bzw. das Objekt, auf das verwiesen wird. Da Prozedur X von Prozedur Y abhängig ist, ist Prozedur X mit einem Laufzeitfehler fehlerhaft, wenn Prozedur Y nicht vorhanden ist. Prozedur Y ist jedoch nicht fehlerhaft, wenn Prozedur X nicht vorhanden ist.

Das folgende Beispiel zeigt, wie die gespeicherte Prozedur X von der gespeicherten Prozedur Y abhängen kann.

USE tempdb
GO
CREATE PROCEDURE Y AS
SELECT * FROM sys.objects
GO
CREATE PROCEDURE X as
    EXEC Y
GO

Um die Abhängigkeit zwischen X und Y anzuzeigen, führen Sie die folgende Abfrage aus.

SELECT * 
FROM  sys.sql_dependencies 
WHERE object_id = object_id('X')
   AND   referenced_major_id = object_id('Y')
   AND   referenced_minor_id = 0
   AND   class = 0;
GO

Wenn Sie Prozedur X löschen, können Sie Prozedur Y weiterhin ausführen. Prozedur Y ist unabhängig von Prozedur X. Falls Sie umgekehrt Prozedur Y löschen und Prozedur X auszuführen versuchen, gibt SQL Server einen Laufzeitfehler zurück. Prozedur X hängt von Prozedur Y ab.

Nachdem Sie Prozedur Y gelöscht haben, wird die Zeile für Prozedur X in der sys.sql_dependencies-Katalogsicht ebenfalls gelöscht. Um dieses Verhalten zu sehen, führen Sie den folgenden Code aus.

USE tempdb;
GO
DROP PROCEDURE Y;
GO
SELECT * 
FROM  sys.sql_dependencies 
WHERE object_id = object_id('X')
   AND   referenced_major_id = object_id('Y')
   AND   referenced_minor_id = 0
   AND   class = 0;
GO

Mithilfe der WITH SCHEMABINDING-Klausel können Sie die Abhängigkeitswartung erzwingen. Wenn Sie eine Sicht an ein Schema binden, können Sie die Tabellen oder Spalten, auf die verwiesen werden, nicht auf eine Weise löschen oder ändern, dass die Abhängigkeit unterbrochen wird. Ebenso wenig können Sie Objekte und Spalten, auf die verwiesen wird, auf eine Weise ändern oder löschen, dass die Abhängigkeiten der Funktion unterbrochen werden, wenn Sie ein Schema an eine Funktion binden. Weitere Informationen zur Schemabindung finden Sie unter Erstellen von benutzerdefinierten Funktionen (Datenbankmodul) und Entwerfen und Implementieren von Sichten.

ms345449.note(de-de,SQL.90).gifHinweis:
SQL Server 2005 unterstützt keine schemagebundenen gespeicherten Prozeduren oder Trigger.

Beispiele für SQL-Abhängigkeiten

In der folgenden Tabelle werden einige Beispiele für SQL-Abhängigkeiten aufgelistet, die zwischen verweisenden Objekten und Objekten, auf die verwiesen wird, bestehen.

Typ des verweisenden Objekts

SQL-Ausdruck in der Definitionsspalte einer Katalogsicht

Beispiel für Entität, auf die verwiesen wird

Prozedur, Funktion, Sicht, Trigger

sys.sql_modules

ms345449.note(de-de,SQL.90).gifHinweis:

Informationen zu Triggern auf Serverebene finden Sie unter sys.server_sql_modules.

Tabelle, Prozedur, Typ

Berechnete Spalte

sys.computed_columns

Funktion, Typ, andere Spalte

DEFAULT-Definition

sys.default_constraints

Funktion

CHECK-Einschränkung

sys.check_constraints

Funktion, Partitionsfunktion

Nummerierte Prozedur

sys.numbered_procedure

Tabelle, Prozedur, Typ

Schemagebundene Funktion

sys.sql_modules

XML-Schemaauflistung

Beispiele für Nicht-SQL-Abhängigkeiten

Nicht alle Abhängigkeiten, die zwischen Objekten bestehen, sind SQL-Abhängigkeiten. Verfügt ein Objekt nicht über einen SQL-Ausdruck, der einen Namensverweis auf ein anderes Objekt enthält, besteht zwischen den beiden Objekten keine SQL-Abhängigkeit. In der folgenden Tabelle werden einige Beispiele für Nicht-SQL-Abhängigkeiten aufgelistet.

Typ des verweisenden Objekts Abhängig von Beschreibung

Spalte

Tabelle

Die Abhängigkeit zwischen der Tabelle und ihren Spalten ist implizit. Diese Beziehung wird im Systemkatalog als der Fremdschlüssel sys.columns.object_id ausgedrückt.

DEFAULT-Definition für eine Spalte, z. B.:

CREATE TABLE myTable AS

(ColA int CONSTRAINT Const1 DEFAULT 1)

Spalte. Für das Beispiel ColA.

Zwischen der DEFAULT-Definition und der Spalte besteht keine SQL-Abhängigkeit, weil sich der Standardwert Const1 nicht namentlich auf die Spalte ColA bezieht. Stattdessen besteht ein Fremdschlüsselverweis von sys.columns.default_object_id auf das DEFAULT-Definitionsobjekt.

Siehe auch

Andere Ressourcen

sys.sql_dependencies (Transact-SQL)
sys.sysdepends (Transact-SQL)
sp_depends (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005