Understanding SQL Dependencies

Zależności SQL są odwołaniami by-name, które są używane w wyrażeniach SQL, utworzyć obiekt od platformy, na podstawie innego obiekt.obiekt Który odwołuje się do innego obiekt w jego definicji i że definicja jest przechowywany w katalogu system jest nazywany Odwoływanie się do obiekt.obiekt jest określana przez inną osobę nosi nazwę obiekt odwołania.Istnieją dwa typy zależności śledzone przez Database Engine.

  • Zależność związanych ze schematem

    Zależność związanych ze schematem jest relacją między dwoma obiektami, który uniemożliwia usunięte lub zmodyfikowane tak długo, jak istnieje obiekt odwołujący się do których istnieją odwołania encji.Podczas tworzenia widoku lub funkcja zdefiniowanej przez użytkownika przy użyciu klauzula WITH SCHEMABINDING tworzony jest zależność związanych ze schematem.Zależność związanych ze schematem można również utworzyć podczas odwołuje się do innej tabela obiekt, takie jak Transact-SQL funkcja zdefiniowanej przez użytkownika, typ zdefiniowany przez użytkownika lub kolekcja schematu XML, w ograniczeniu wyboru lub DEFAULT lub w definicji kolumna obliczana. Określanie obiektu przy użyciu (część 2schema_name.object_name) Nazwa nie odpowiada wymaganiom jako odwołanie związanych ze schematem.

  • Zależność inne niż związane schematu

    Zależność nie związanych ze schematem jest relacja między dwoma obiektami, który nie uniemożliwia odwołania obiekt z jest usunięte lub zmodyfikowane.

Na poniższej ilustracji pokazano przykład zależność SQL.

Depiction of a SQL dependency

Na ilustracji istnieją dwie osoby: Procedura X i procedura Y. Procedura X zawiera wyrażenie języka SQL, które by-name odwołuje się do procedury Y.Procedura X jest określane jako obiekt odwołujący się i procedury Y jest znany jako obiekt do którego istnieje odwołanie.Ponieważ procedura X zależy od procedury Y, X procedury niepowodzenie uruchomienia-czas błędu, jeśli procedura Y nie istnieje.Jednak procedury Y nie powiedzie się, jeśli procedura X nie istnieje.

W poniższym przykładzie przedstawiono sposób przechowywanej procedury X może zależeć od procedura przechowywana Y.

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

Aby wyświetlić zależności 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 obiektów odwołujący się i do których następują odwołania

W poniższej tabela wymieniono rodzaje obiektów, dla którego informacje o zależnościach są tworzone i obsługiwane.W tabela wskazuje, czy obiekt jest śledzona jako jednostki odwołujący się lub do których istnieją odwołania encji.Informacje o zależnościach nie jest tworzone lub obsługiwane dla reguły, ustawienia domyślne, tabele tymczasowe, tymczasowe procedury przechowywane lub obiektów systemu.

obiekt typu

Odwoływanie się do obiekt

obiekt odwołania

Table

Tak *

Tak

Bez opuszczania środowiska, można zarządzać sieci fizycznej i łatwo zespołów projektów.

Tak

Tak

Transact-SQL Procedura przechowywana **

Tak

Tak

składowana procedura CLR

Nie

Tak

Transact-SQL funkcja zdefiniowanej przez użytkownika

Tak

Tak

Środowisko CLR funkcja zdefiniowanej przez użytkownika

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 serwera DDL wyzwalacza

Tak

Nie

Rozszerzone procedury przechowywane

Nie

Tak

Kolejki

Nie

Tak

Synonim

Nie

Tak

Typ (alias i zdefiniowany przez użytkownika typ danych CLR)

Nie

Tak

kolekcja schematu XML

Nie

Tak

Funkcja partycji

Nie

Tak

* tabela jest śledzony jako odwoływania się do obiekt tylko wtedy, gdy się odwołuje Transact-SQL Moduł, typ zdefiniowany przez użytkownika lub kolekcja schematu XML w definicji kolumna obliczana, ograniczenia CHECK lub DEFAULT ograniczenie.

** Numerowane procedur przechowywanych z wartością całkowitą większą niż 1 nie są śledzone jako jednej obiekt odwołujący się lub do którego istnieje odwołanie.

W jaki sposób jest zarejestrowanych informacji o zależnościach

The Database Engine automatically tracks dependency information when referencing entities are created, altered, or dropped and records this information in the SQL Server system catalog.Na przykład jeśli tworzysz wyzwalacz, który odwołuje się do tabela, jest rejestrowana zależności między tymi obiektami.Jeśli upuścisz później wyzwalacz, informacje o zależnościach jest usuwany z katalogu systemu.

W przeciwieństwie do wcześniejszych wersji programu SQL Server, w zależności, które były śledzone według IDENTYFIKATORA, zależności, teraz są śledzone według nazw. Oznacza to, że Database Engine nawet wtedy, gdy podmiot, do którego istnieje odwołanie, nie istnieje w czasie tworzenia obiektu odwołującego się do śledzenia informacji o zależnościach między dwoma obiektami. Takiej sytuacji może wystąpić z powodu rozpoznawanie nazw odroczenia.Na przykład procedura przechowywana, która odwołuje się do tabela można został utworzony pomyślnie, ale nie jest to wykonywane, nawet jeśli nie tabela, do którego istnieje odwołanie w bazie danych.The Database Engine records the dependency between the procedure and tabela, however, an ID for the tabela cannot be recorded because the object does not yet exist. Jeśli tabela została utworzona później, identyfikator tabeli jest zwracana wraz inne informacje o zależnościach.

Informacje o zależnościach są śledzone, po wyświetleniu odwołania encji według nazw w wyrażeniu SQL utrwalonej obiekt odwołujący się.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-SQLmodule:

    • Instrukcje Manipulation Language (DML) danych (SELECT, INSERT, UPDATE i DELETE, korespondencji SERYJNEJ)

    • wykonać

    • ZADEKLAROWAĆ

    • zestaw (jeśli zestaw jest używana przy użyciu funkcja zdefiniowanej przez użytkownika lub typ zdefiniowany przez użytkownika.Na przykład DECLARE @var int; SET @var = dbo.udf1.)

    Osoby, do których odwołuje się do definicji Transact-SQL Moduł za pomocą instrukcji definicja danych Language (DDL), takie jak CREATE, ALTER lub DROP nie są śledzone.

  • Za pomocą instrukcji CREATE, ALTER lub DROP tabela, gdy nie są one w sprawozdaniu Transact-SQL Moduł i odwołania obiekt jest Transact-SQL funkcja zdefiniowanej przez użytkownika, typ zdefiniowany przez użytkownika lub definicja kolumna obliczana, ograniczenia CHECK lub ograniczenia DEFAULT kolekcja schematu XML.

Bazy danych poza granice i zależności między serwera

Zależność bazy danych między jest tworzony, gdy obiekt sprawia, że odwołanie do innego obiektu przy użyciu prawidłowej nazwy trzy części.Odwołanie między serwerem jest tworzony, gdy obiekt sprawia, że odwołanie do innego obiektu przy użyciu prawidłowej nazwy four-part.Nazwa serwera i bazy danych są rejestrowane tylko wtedy, gdy nazwa jest jawnie określony.Na przykład, kiedy określony jako MyServer.MyDB.MySchema.MyTable, rejestrowane są nazwy serwera i bazy danych; jednak po określonej jako MyServer..MySchema.MyTable, rejestrowany jest tylko nazwa serwera. Aby uzyskać informacje dotyczące prawidłowej nazwy wieloczęściowe zobacz Transact-SQL Syntax Conventions (Transact-SQL).

Obowiązują następujące ograniczenia:

  • Zależności między serwerem dla instrukcji OPENROWSET OPENQUERY i OPENDATASOURCE nie są śledzone.

  • Zależności dla instrukcja EXEC ("…") CO linked_server nie są śledzone.

W następującej tabela podsumowano zależności między serwerem i bazą danych między są śledzone i informacje zapisane w wykazie systemu i zgłoszone przez sys.sql_expression_dependencies (Transact-SQL).

wyrażenie języka SQL w module

Jest śledzona

Nazwa serwera, do którego istnieje odwołanie

Nazwa bazy danych do którego istnieje odwołanie

Nazwa schematu odwołania

Nazwa obiektu, do którego istnieje odwołanie

SELECT * FROM s1.db2.sales.t1

Tak

S1

db2

Sprzedaż

T1

SELECT * FROM db3T1

Tak

 

DB3

 

T1

Db2.dbo.Proc1 EXEC

Tak

 

db2

dbo

proc1

SZEFOWIE ("…") AT linked_srv1

Nie

 

 

 

 

EXEC linked_svr1.db2.sales.proc2

Tak

linked_svr1

db2

Sprzedaż

proc2

Efekt sortowanie 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śli jednostki odwołuje się procedura przechowywana Some_Table i SOME_TABLE w bazie danych, która używa przypadek-rejestrowana jest wielkość liter sortowanie, informacje o zależnościach dla dwóch jednostek ponieważ porównanie dwóch nazw wskazuje, że nie są takie same. Jeśli korzysta się z bazą danych przypadek-niewrażliwe sortowanie, jednak tylko pojedyncze zależność jest rejestrowana.

Zależności między serwerem i bazą danych między sortowanie serwera, na którym znajduje się obiekt odwołujący się służy do rozpoznania nazwy serwera i bazy danych.Zestawienie bieżącej bazy danych jest używany do rozpoznania nazwy nazwy schematu i obiektu.

Należy wziąć pod uwagę następujące definicje procedura przechowywana.Jeśli procedura przechowywana jest tworzony w bazie danych z liter sortowanie na wystąpienie SQL Server z serwera bez uwzględniania wielkości liter sortowanie rejestrowane są dwa zależności 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 funkcja zdefiniowanej przez użytkownika, typ zdefiniowany przez użytkownika (UDT) lub odwołaniem do kolumna typu xquery xml.

Należy wziąć pod uwagę następujące definicje procedura przechowywana.

CREATE PROCEDURE dbo.p1 AS 
    SELECT column_a, Sales.GetOrder() FROM Sales.MySales; 

W czasie, tworzona jest procedura przechowywana, nie wiadomo, czy Sales.GetOrder() jest odwołaniem do funkcja zdefiniowanej przez użytkownika o nazwie GetOrder w Sales schemat lub kolumna o nazwie Sales typu UDT z metoda o nazwie GetOrder(). Jeśli odwołanie jest niejednoznaczny, zależność jest zgłaszany jako niejednoznaczne przez ustawienie kolumna is_ambiguous sys.sql_expression_dependencies i sys.dm_sql_referenced_entities na 1.Następujące informacje o zależnościach są przedstawione:

  • Zależność między procedura przechowywana i tabela.

  • Zależność między procedura przechowywana i funkcja zdefiniowanej przez użytkownika.Jeśli funkcja, identyfikator funkcji po zgłoszeniu; w przeciwnym razie identyfikator ma wartość NULL.

  • Zależność od funkcja jest oznaczony jako niejednoznaczne.Oznacza to is_ambiguous jest ustawiona na 1.

  • Zależności poziom kolumna nie są zgłaszane, ponieważ nie można powiązać instrukcja, w którym odwołania do kolumn.

Utrzymywanie zależności

The Database Engine maintains both schema-bound and non-schema-bound dependencies.Te zależności są automatycznie odświeżane podczas każdej operacji, które ma wpływ zależność śledzenia, na przykład w przypadku uaktualniania wcześniejszej wersja bazy danych SQL Server czy zmiana sortowanie bazy danych.

Historia zmian

Microsoft Learning

W instrukcja "zależności kolumna nie są śledzone dla funkcji wycenione tabela CLR" usunięte z częścią Uwagi.