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.

Opis 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.