Opis zależności SQL
Zależności SQL są odwołaniami by-name, które są używane w wyrażeniach SQL, które jeden obiekt opierający się na innej jednostce.Jednostka odwołujący się do innego obiekt w jego definicji i definicji jest przechowywany w katalogu system jest nazywany odwołującego się do obiekt.Jednostka jest określana przez inny obiekt jest nazywany Encja — odwołanie.Istnieją dwa typy śledzone przez zależność Aparat baz danych.
Zależność związanych ze schematem
Zależność związanych ze schematem jest relacją między dwoma obiektami, które zapobiega usunięte lub zmodyfikowane tak długo, jak istnieje odwołujący się obiekt Encja — odwołanie.Podczas tworzenia widoku lub funkcja zdefiniowanej przez użytkownika przy użyciu klauzula Z SCHEMABINDING, powstaje zależność związanych ze schematem.Zależność związanych ze schematem można również utworzyć podczas tabela odwołuje innego obiekt, takich jak Transact-SQL funkcja zdefiniowana przez użytkownika, typ zdefiniowany przez użytkownika lub kolekcja schematu XML, wyboru lub domyślne ograniczenie lub w definicji kolumna obliczana.Określanie obiektu przy użyciu dwóch części (schema_name.object_name) nazwa nie kwalifikuje się jako odwołanie związanych ze schematem.
Zależność bez schematu związany
Zależność powiązania schematu jest relację między dwoma obiektami, które nie uniemożliwia odwołanie obiekt przed usunięte lub zmodyfikowane.
Ilustracja przedstawia przykład zależności SQL.
Na ilustracji są dwie jednostki: Procedura x i y procedury.Procedura x zawiera wyrażenie języka SQL zawiera odwołanie do procedury y by-name.Procedura x jest znany jako obiekt odwołujący się i procedury y jest znany jako Encja — odwołanie.Ponieważ procedura x zależy od procedury Y, X procedury niepowodzenie Uruchom -czas błąd, jeśli nie istnieje procedura Y.Jednakże procedura y nie zawiedzie, jeżeli procedura x nie istnieje.
W poniższym przykładzie przedstawiono procedura składowana w sposób X może zależeć od procedura składowana Y.
USE tempdb;
GO
CREATE PROCEDURE dbo.Y AS
SELECT * FROM sys.objects
GO
CREATE PROCEDURE dbo.X as
EXEC dbo.Y;
GO
Aby zobaczyć zależność X na Y, uruchom następującą kwerendę.
SELECT *
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID('X')
AND referenced_id = OBJECT_ID('Y')
AND referenced_schema_name = 'dbo'
AND referenced_entity_name = 'Y'
AND referenced_database_name IS NULL
AND referenced_server_name IS NULL;
GO
Typy jednostek odwołujących się i odwołania
Poniższa tabela zawiera listę typów jednostek, dla których informacje o zależnościach tworzone i utrzymywane.Tabela wskazuje, czy obiekt jest śledzona odwołujący się jednostka lub jednostki odwołania.Informacje o zależnościach nie jest tworzone lub utrzymywane dla reguły, ustawienia domyślne, tabel tymczasowych, tymczasowe procedury przechowywane lub obiektów systemu.
Typ encji |
Odwołanie do obiekt |
Odwołanie doobiekt |
---|---|---|
Tabela |
Tak * |
Tak |
Wyświetlanie |
Tak |
Tak |
Transact-SQL procedura składowana ** |
Tak |
Tak |
procedura składowana aparatu CLR |
Nie |
Tak |
Transact-SQL funkcja zdefiniowana przez użytkownika |
Tak |
Tak |
Funkcja zdefiniowana przez użytkownika CLR |
Nie |
Tak |
Wyzwalacz CLR (DML i DDL) |
Nie |
Nie |
Transact-SQL wyzwalacz DML |
Tak |
Nie |
Transact-SQL wyzwalacz DLL poziom bazy danych |
Tak |
Nie |
Transact-SQL poziom serwerawyzwalacz DLL |
Tak |
Nie |
Rozszerzone procedury przechowywane |
Nie |
Tak |
Kolejki |
Nie |
Tak |
Synonim |
Nie |
Tak |
Typ (alias i CLR typ zdefiniowany przez użytkownika) |
Nie |
Tak |
kolekcja schematu XML |
Nie |
Tak |
Funkcja Partition |
Nie |
Tak |
* tabela jest śledzona jako obiekt odwołujący się tylko wtedy, gdy odwołuje się Transact-SQL modułu, typ zdefiniowany przez użytkownika lub kolekcja schematu XML w definicji kolumna obliczana, ograniczenia CHECK lub domyślne ograniczenie.
** Numerowane procedur przechowywanych z całkowitą większą niż 1 nie są śledzone jako obiekt odwołujący się lub odwołania.
Sposób śledzenia informacji o zależnościach
Aparat baz danych Automatycznie podczas tworzenia, zmienione lub usunięte podmioty odwołujący się do śledzenia informacji o zależnościach i informacje o tym w SQL Server system wykazu.Na przykład jeśli tworzysz wyzwalacz, który odwołuje się do tabela zależność między tymi jednostkami jest rejestrowana.Jeśli później usunąć wyzwalacz, informacje o zależnościach zostanie usunięte z wykazu systemu.
W przeciwieństwie do starszych wersji SQL Server, w zależności, które były śledzone przez identyfikator, zależności, teraz są śledzone według nazwy.Oznacza to, że Aparat baz danych śledzi informacje o zależnościach między dwoma obiektami, nawet jeśli Encja — odwołanie nie istnieje w czas utworzyć odwołujący się obiekt.Okoliczność ta może wystąpić z powodu Rozpoznawanie nazw odroczonego.Na przykład procedura składowana, która odwołuje się do tabeli można być został utworzony pomyślnie, ale nie wykonane, nawet jeśli odwołanie tabela nie istnieje w bazie danych. Aparat baz danych Rekordy zależność między procedurą i tabela, jednak identyfikator dla tabela nie można nagrać, ponieważ obiekt jeszcze nie istnieje.Jeśli później utworzenie tabela identyfikator tabela jest zwracane z inne informacje o zależnościach.
Informacje o zależnościach są śledzone, po wyświetleniu Encja — odwołanie nazwy w utrwalonym wyrażenie języka SQL odwołujący się obiekt.Informacje o zależnościach są uzyskiwane, gdy podmioty odwołuje się nazwa w następujący sposób:
By using any of the following statements in the definition of a Transact-SQL module:
Instrukcje Manipulation Language (DML) danych (SELECT, INSERT, UPDATE i DELETE, korespondencji seryjnej)
WYKONANIE
ZADEKLAROWAĆ
ZESTAW (gdy zestaw jest używany typ zdefiniowany przez użytkownika lub funkcja zdefiniowana przez użytkownika.For example DECLARE @var int; SET @var = dbo.udf1.)
Podmioty w definicji Transact-SQL modułu przy użyciu instrukcji Data Definition Language (DDL), takie jak CREATE, ALTER lub UPUSZCZANIA nie są śledzone.
Za pomocą instrukcji CREATE, ALTER lub DROP TABLE, gdy deklaracje nie są w Transact-SQL moduł i odwołanie obiekt jest Transact-SQL funkcja zdefiniowana przez użytkownika, typ zdefiniowany przez użytkownika lub kolekcja schematu XML, określonych kolumna obliczanej, ograniczenia CHECK lub domyślne ograniczenie.
Między bazami danych i zależności między serwerem
Kiedy jednostka tworzy odwołanie do innego obiekt przy użyciu prawidłowej nazwy trzech części, powstaje zależność między bazami danych.Odwołanie krzyżowe serwera jest tworzony, gdy jednostka tworzy odwołanie do innego obiekt przy użyciu prawidłowej nazwy czteroczęściowym identyfikatorem.Nazwa serwera i bazy danych są rejestrowane tylko wtedy, gdy nazwa jest jawnie określony.Na przykład, gdy określony jako MyServer.MyDB.MySchema.MyTable, nazwy serwera i bazy danych są rejestrowane; Jednakże gdy określony jako MyServer..MySchema.MyTable, rejestrowana jest nazwa serwera.Uzyskać informacje o prawidłowych nazw wieloczęściowe Konwencje składni języka Transact-SQL (Transact-SQL).
Obowiązują następujące ograniczenia:
Zależności między serwerem dla instrukcji OPENROWSET, OTWÓRZKWERENDĘ i OPENDATASOURCE nie są śledzone.
Zależności dla instrukcja ("…") EXEC AT linked_server nie są śledzone.
W następującej tabela podsumowano zależności między serwerem i między bazami danych, które są śledzone i informacje zapisane w katalogu system i zgłoszone przez sys.sql_expression_dependencies (języka Transact-SQL).
wyrażenie języka SQL w module |
Jest śledzona |
Nazwa serwera odwołanie |
Nazwa odnośna baza danych |
Nazwa schematu odwołania |
Odwołanie do obiekt nazwy |
---|---|---|---|---|---|
Wybierz * Z s1.db2.sales.t1 |
Tak |
S1 |
db2 |
Sprzedaż |
T1 |
Wybierz * Z db3.T1 |
Tak |
|
DB3 |
|
T1 |
SZEFOWIE db2.dbo.Proc1 |
Tak |
|
db2 |
dbo |
proc1 |
SZEFOWIE ("…") W linked_srv1 |
Nie |
|
|
|
|
SZEFOWIE linked_svr1.db2.sales.proc2 |
Tak |
linked_svr1 |
db2 |
Sprzedaż |
proc2 |
Efekt sortowania na śledzenia zależności
sortowanie określa reguły sortowanie i porównywania danych.Sortowanie bazy danych jest używany do identyfikowania informacji o zależnościach dla obiektów w bazie danych.Na przykład, jeżeli podmioty odwołuje się procedura składowana Some_Table i SOME_TABLE w bazie danych, która używa przypadek-sortowanie poufnych informacji o zależnościach dla dwóch jednostek jest rejestrowana, ponieważ porównanie dwóch nazw wskazuje, że nie są one takie same.Jeśli baza danych używa przypadek-niewrażliwe sortowanie, jednak tylko pojedynczy zależność jest rejestrowana.
Zależności między serwerem i między bazami danych sortowanie serwera, na którym znajduje się obiekt odwołujący się służy do rozpoznania nazwy serwera i bazy danych.Sortowanie bieżącej bazy danych jest używany do rozpoznania nazwy nazwy schematu i obiektu.
Rozważmy następującą definicję procedura składowana.Jeśli procedura składowana jest tworzony w bazie danych z przypadek sortowania wrażliwe na wystąpienie SQL Server z przypadek-Sortowanie serwera niewrażliwe dwóch zależności są rejestrowane dla obiektów srv_referenced.db_referenced.dbo.p_referenced i srv_referenced.db_referenced.DBO.P_REFERENCED.
CREATE PROCEDURE p_referencing AS
EXECUTE srv_referenced.db_referenced.dbo.p_referenced
EXECUTE srv_referenced.db_referenced.DBO.P_REFERENCED
EXECUTE SRV_REFERENCED.DB_REFERENCED.dbo.p_referenced;
Rozpoznawanie niejednoznacznych odwołań
Odwołanie jest niejednoznaczny, gdy można rozwiązać przy uruchomieniu czas funkcję zdefiniowaną przez użytkownika, typ zdefiniowany przez użytkownika (UDT) lub xquery odwołanie do kolumna typu xml.
Rozważmy następującą definicję procedura składowana.
CREATE PROCEDURE dbo.p1 AS
SELECT column_a, Sales.GetOrder() FROM Sales.MySales;
W czas tworzona jest procedura składowana, nie jest znany czy Sales.GetOrder() jest odwołanie do funkcja zdefiniowanej przez użytkownika o nazwie GetOrder w Sales schematu lub kolumna o nazwie Sales typu UDT metoda o nazwie GetOrder().Jeśli odwołanie jest niejednoznaczny, zależność jest zgłaszane są niejednoznaczne, ustawiając is_ambiguous kolumna w sys.sql_expression_dependencies i sys.dm_sql_referenced_entities 1.Jest podać następujące informacje o zależnościach:
Zależność między procedura składowana i tabela.
Zależność między procedura składowana i funkcja zdefiniowanej przez użytkownika.Jeśli funkcja istnieje, jest zgłaszane identyfikator funkcji; w przeciwnym razie identyfikator jest NULL.
Zależność od funkcja jest oznaczony jako niejednoznaczne.Oznacza to, że is_ambiguous jest zestaw 1.
Zależności poziom kolumny nie są zgłaszane, ponieważ instrukcja w odwołuje się kolumny nie można powiązać.
Utrzymywanie zależności
Aparat baz danych Przechowuje zależności związanych ze schematem i powiązania schematu.Te zależności są automatycznie odświeżane podczas każdej operacji, który wpływa na śledzenie zależność, na przykład podczas uaktualniania bazy danych z wcześniejszej wersja programu SQL Server lub zmiany sortowanie bazy danych.