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.
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.
Hinweis: |
---|
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
Hinweis:
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.:
|
Spalte. Für das Beispiel |
Zwischen der DEFAULT-Definition und der Spalte besteht keine SQL-Abhängigkeit, weil sich der Standardwert |
Siehe auch
Andere Ressourcen
sys.sql_dependencies (Transact-SQL)
sys.sysdepends (Transact-SQL)
sp_depends (Transact-SQL)