Raportowanie zależności SQL
Zależności SQL są odwołaniami by-name, które są używane w wyrażeniach SQL przez jednego użytkownika obiekt od platformy, na podstawie innego obiekt.Na przykład widoków i procedur przechowywanych uzależnione istnienie tabel, które zawierają dane zwrócone przez widoku lub procedury.W raportach dotyczących informacji o zależnościach jest przydatne w następujących scenariuszach:
Przeniesienie modułu, takich jak procedura przechowywana z jednej aplikacji do innej.
Przed przeniesieniem modułu, można określić, jeśli istnieją bazy danych lub obiektów bazy danych między odwołuje się moduł, który musi być również przenoszone wraz z modułem.
Modyfikowanie definicji obiekt, takie jak dodanie lub usunięcie kolumna w tabela.
Przed rozpoczęciem modyfikowania obiekt, można określić, czy są dostępne inne podmioty, które zależą od bieżącej definicji obiekt.Te podmioty zależne może powodować nieoczekiwane rezultaty, gdy używane przez kwerendy lub wywoływane po modyfikacji i może wymagać operację odświeżania metadane lub modyfikacji do ich definicji.
Przenoszenie jednego lub kilku baz danych z jednego serwera na inny.
Przed przeniesieniem baz danych na inny serwer, można ustalić, czy jednostki w jednej bazie danych mają zależności na jednostki w innej bazie danych.W ten sposób wiadomo przeniesienia tych baz danych na tym samym serwerze.
Konfigurowanie trybu pracy awaryjnej dla aplikacji, które obejmują wiele baz danych.
Należy upewnić się, że aplikacja jest dostępne na wszystkie godziny i użycia dublowanie bazy danych jako strategii pracy awaryjnej.Więcej niż jednej bazy danych zależy od aplikacji i chce mieć pewność, że aplikacja może działać pomyślnie ją, gdy pracy awaryjnej serwer dublowany.Ponieważ dublowanie działa poziom bazy danych, należy określić, które baz danych są krytyczne dla aplikacji, tak, aby dublowanie został ustawiony dla wszystkich użytkowników indywidualnie.Można następnie zapewnić, że wszystkie bazy danych awaryjnej ze sobą w ten sposób zapewnienia, że aplikacja działa serwer dublowany.
Znajdowanie obiektów w aplikacji, które są wykonać przy użyciu nazw four-part kwerendami rozproszonymi.
Należy określić serwery, które połączone są używane w kwerendami rozproszonymi.
Znajdowanie jednostki używane w aplikacji, zawierających zależne od rozmówcy odwołania lub odwołań do jednej części nazwy.
Przed przystąpieniem do wdrażania aplikacji, można określić, czy jednostki używane przez aplikację zawiera zależny od rozmówcy odwołania lub odwołań do podmiotów przy użyciu tylko jednej części nazwy.Odwołania takie wskazuje niskiej wskazówki dotyczące programowania i może spowodować nieoczekiwane zachowanie, gdy aplikacja jest rozmieszczana.Dzieje się tak, ponieważ rozdzielczość (wiązanie) obiektu, do którego istnieje odwołanie, zależy od schematu wywołującego i nie określono te informacje do czas wykonywania.Po znalezieniu te odwołania, kwerendy mogą być skorygowane przez określenie odpowiedniego wieloczęściową takich jak schema_name.object_name.
Aby uzyskać więcej informacji o zależnościach SQL zobacz Understanding SQL Dependencies.
Raportowanie zależności za pomocą funkcji i widoków systemu
Aby wyświetlić zależności SQL SQL Server 2008 zawiera katalog sys.sql_expression_dependencies widoku sys.dm_sql_referenced_entities i sys.dm_sql_referencing_entities funkcji dynamicznego zarządzania. Można wysyłać te obiekty, aby przywrócić informacje o zależnościach na obiektów zdefiniowanych przez użytkownika.
Można również wyświetlać zależności SQL przy użyciu Wyświetlanie zależności in SQL Server Management Studio. Aby uzyskać więcej informacji zobaczJak Wyświetlanie zależności SQL (SQL Server Management Studio).
Za pomocą sys.sql_expression_dependencies widok wykazu
The sys.sql_expression_dependencies catalog view provides the database owner or administrator bazy danych with the ability to report dependency information for a given database.W tym widoku można odpowiedzieć pytania globalne, takie jak:
Jakie zależności między serwerem lub bazy danych między jest wyposażony w bazie danych?
Zależności, jaki istnieje w bazie danych?
Którymi obiektami w bazie danych są zależne od rozmówcy odwołania?
Jakiego poziomu serwera lub poziom bazy danych wyzwalacze DDL ma zależności na obiektów w bazie danych?
Jakie moduły w bazie danych należy użyć typ zdefiniowany przez użytkownika (UDT)?
sys.sql_expression_dependencies ma następujące ograniczenia:
Zależności między serwerem i bazą danych między obiektami zwracane są tylko wtedy, gdy określono prawidłową nazwą four-part lub trzy części.Identyfikatory dla jednostek, do którego istnieje odwołanie, nie są zwracane.
Zależności poziom kolumna są zgłaszane jedynie dla obiektów związanych ze schematem.
Za pomocą sys.dm_sql_referenced_entities funkcja dynamicznego zarządzania
The sys.dm_sql_referenced_entities funkcja returns one row for each user-defined obiekt referenced by name in the definition of the specified referencing obiekt.Odwołujący się podmiotu może być obiekt zdefiniowany przez użytkownika, wyzwalacz DLL poziomu serwera lub wyzwalacz DLL poziom bazy danych.Jest to te same informacje, które są zwracane przez sys.sql_expression_dependencies, jednak zestaw wyników jest ograniczona do jednostek, do których odwołuje się określony obiekt odwołujący się.Ta funkcja jest przydatna dla deweloperów, którzy chcą śledzenia zależności na moduły właścicielem lub na których mają uprawnienia definicja VIEW.
Korzystanie z funkcja zarządzania dynamicznym sys.dm_sql_referencing_entities
The sys.dm_sql_referencing_entities funkcja returns one row for each user-defined obiekt in the current database that references another user-defined obiekt by name.Odwołujący się podmiotu może być obiekt zdefiniowany przez użytkownika, typ (alias lub CLR UDT), kolekcja schematu XML lub funkcja partycji.Ta funkcja jest przydatna dla deweloperów, którzy chcą śledzenia zależności w ich własnych jednostek.Na przykład przed rozpoczęciem modyfikowania typ zdefiniowany przez użytkownika, Projektant może użyć tej funkcja do określenia wszystkie obiekty w bazie danych, które zależą od tego typu.Należy zauważyć, że odwołania do typ zdefiniowany przez użytkownika w tabela nie są zgłaszane, pod warunkiem, że nie określono typu w definicji kolumna obliczana, ograniczenia CHECK lub ograniczenia DEFAULT.
Przykłady
W poniższych przykładach zwracają zależności SQL przy użyciu widoku sys.sql_expression_dependencies wykazu i funkcji dynamicznego zarządzania sys.dm_sql_referenced_entities i sys.dm_sql_referencing_entities.
Zgłoszenie podmiotów, na które określonego obiekt zależy od
Można wysyłać kwerendy widoku wykazu sys.sql_expression_dependencies lub funkcja dynamicznego zarządzania sys.dm_sql_referenced_entities, aby uzyskać listę obiektów, od których zależy określonego obiektu.Na przykład można zwrócić listę obiektów, do których odwołuje się moduł, takie jak procedura przechowywana lub wyzwalacza.
Poniższy przykład tworzy tabela, widok i trzy procedur przechowywanych.Obiekty te są używane w nowszych kwerendy do wykazania, jak zgłaszać informacji o zależnościach.Że MyView i MyProc3 oba odwołania Mytable. MyProcodwołania 1 MyView, a MyProc2 odwołania MyProc1.
W poniższym przykładzie kwerendy widoku wykazu sys.sql_expression_dependencies, aby przywrócić obiekty, które odwołują się MyProc3.
Here is the result set.
referencing_entity nazwa_serwera nazwa_bazy_danych schema_name referenced_entity
------------------ ----------- ------------- ----------- -----------------
MyProc3 NULL NULL dbo MyProc2
Wartość NULL AdventureWorks MyProc3 dbo Moja_tabela
(dotyczy wiersze 2)
Dwoma obiektami odwołuje się do by-name w definicji MyProc3 są zwracane. Nazwa serwera jest NULL, ponieważ wskazane obiekty nie są określone przy użyciu prawidłowej nazwy four-part.Nazwa bazy danych jest wyświetlana dla MyTable ponieważ obiekt został zdefiniowany w procedurze przy użyciu prawidłowej nazwy trzy części.
Podobne informacje mogą być zwracane przy użyciu sys.dm_sql_referenced_entities.Oprócz zgłoszenie nazw obiektów, funkcja ta może służyć do zwrotu poziomie kolumna zależności obiektów związanych ze schematem i nie związanych ze schematem.W poniższym przykładzie są zwracane podmiotów złożenia MyProc3 zależy od tego, w tym zależności poziom kolumna.
Here is the result set.
nazwa_serwera nazwa_bazy_danych schema_name referenced_entity nazwa_kolumny
----------- ----------------- ----------- ----------------- -----------
Wartość NULL NULL dbo MyProc2 NULL
Wartość NULL AdventureWorks dbo Moja_tabela NULL
Wartość NULL AdventureWorks dbo Moja_tabela c1
Wartość NULL AdventureWorks dbo Moja_tabela c2
(dotyczy wiersze 4)
W tym zestaw wyników, zwracane są takie same dwa podmioty, jednak dwa wiersze dodatkowe są zwracane, pokazujący zależności w kolumnach c1 i c2 w MyTable. Zwróć uwagę, że w definicji MyProc3, SELECT * użyto instrukcja, aby odwołać się w kolumnach MyTable. Nie jest praktyczne kodowania; jednak zależności poziomie kolumna nadal są śledzone przez Database Engine.
Do tego momentu w przykładach zostały zilustrowane jak zwrócić obiektów, od którego obiekt zależy bezpośrednio.W poniższym przykładzie użyto cyklicznej typowe wyrażenie tabela (CTE) aby przywrócić wszystkie zależności bezpośrednie i pośrednie obiekt.
Here is the result set.
poziom referenced_entity referenced_schema nazwa_obiektu
----------- ----------------- ----------------- -----
MyProc3 dbo MyProc2 0
MyProc3 dbo Moja_tabela 0
MyProc2 dbo MyProc1 1
MyProc1 dbo MOJWIDOK 2
MOJWIDOK dbo Moja_tabela 3
(dotyczy wiersze 5)
W tym zestawie wyników MyProc2 i MyTable są zwracane w postaci bezpośrednich zależności, co wskazują wartość poziom 0. Trzeci wiersz zawiera zależność pośrednia MyProc1, który jest używany w definicji MyProc2. Czwarty wiersz zawiera zależność MyView, który jest używany w definicji MyProc1 i wreszcie zależność od MyTable, który jest używany w definicji MyView.
Dzięki zwraca informacje o zależnościach hierarchiczne, można określić pełną listę zależności bezpośrednie i pośrednie na danego obiekt i wywnioskować kolejności, w którym obiekty te powinny być rozmieszczone jeśli muszą być przenoszone do innej bazy danych.
W poniższym przykładzie zwraca te same informacje hierarchiczne zależności pomagają przy użyciu funkcja sys.dm_sql_referenced_entities.Jednostki, w którym MyProc3 zależy od tego, są zwracane w tym zależności poziom kolumna.
W raportach dotyczących podmiotów zależnych od określonej obiekt
Kwerendy można sys.sql_expression_dependencies wyświetlanie katalogu lub sys.dm_sql_referencing_entities dynamicznego zarządzania funkcji, aby uzyskać listę obiektów, które zależą od określonego obiekt.Na przykład jeśli określony obiekt jest tabelą, zwracane są wszystkie obiekty, odwołujące się do tabela o nazwie w ich definicji.
W poniższym przykładzie są zwracane podmioty, które odwołują się obiekt dbo.MyTable.
Podobne informacje mogą być zwrócone za pomocą funkcja dynamicznego zarządzania sys.dm_sql_referenced_entities.
Raportowanie zależności poziom kolumna
Zależności poziom kolumna mogą być zgłaszane za pomocą sys.dm_sql_referenced_entities dla obiektów związanych ze schematem i nie związanych ze schematem.Kolumna poziom zależności obiektów związanych ze schematem można zgłaszać również za pomocą sys.sql_expression_dependencies.
W poniższym przykładzie kwerendy sys.dm_sql_referenced_entities poziom kolumna raportu zależności obiektów innych niż związanych ze schematem.W przykładzie najpierw tworzy. Table1 i Table 2 i procedura przechowywana Proc1. Tej procedury odwołuje się do kolumn b i c w Table1 i kolumn c2 w Table2. W widoku sys.dm_sql_referenced_entities jest uruchamiany z procedurą przechowywaną określony jako odwołujący się obiektu. Zestaw wyników zawiera wiersze dla jednostek, do którego istnieje odwołanie Table1 i Table2 i kolumnach, do których istnieją odwołania w definicji procedura przechowywana. Należy zauważyć, że zwracana jest wartość NULL kolumna nazwa_kolumny w wierszach, które odwołują się do tabel.
Here is the result set.
referenced_id nazwa_tabeli, nazwa_kolumny
------------- ----------- -------------
151671588 Tabela1 NULL
151671588 Tabela1 b
151671588 Tabela1 c
2707154552 Tabela2 NULL
2707154552 Tabela2 c2
Raportowanie między serwera i bazy danych poza granice zależności
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ć więcej informacji na temat zależności między serwerem i bazą danych między są śledzone, zobacz Understanding SQL Dependencies.
Za pomocą sys.sql_expression_dependencies lub sys.dm_sql_referenced_entitites można zgłaszać bazy danych poza granice i serwera wzajemne zależności.
Dojście określone śledzenia jest nieprawidłowa.W przykładzie najpierw tworzy bazy danych db1 i dwóch procedur przechowywanych, które odwołują się do tabel baz danych db2 i db3. The sys.sql_expression_dependencies tabela is then queried to report the cross-database dependencies between the procedures and the tables. Należy zauważyć, że zwracana jest wartość NULL w referenced_schema_name kolumna dla encji, do którego istnieje odwołanie t3 ponieważ nie określono nazwy schematu dla tego obiektu w definicji procedury.
Raportowanie References zależne rozmówcy
Odwołanie zależne od rozmówcy oznacza, że wiązanie schematu z odwołania obiekt występuje na czas wykonania; dlatego rozdzielczość identyfikator obiekt zależy od domyślnego schematu obiektu wywołującego.Jest to najczęściej wiązanie dynamiczne schematu i występuje, gdy odwołania obiekt procedury przechowywanej, rozszerzone procedury przechowywanej lub funkcja zdefiniowanej przez użytkownika nie związanych ze schematem nosi za pomocą instrukcja wykonać bez określania nazwy schematu.Na przykład odwołanie do obiektu w formacie EXECUTE MySchema.MyProc nie jest obiekt wywołujący zależnych, jednak odwołanie w formacie EXECUTE MyProc obiekt wywołujący jest zależna.
Odwołania zależne od wywołującego może spowodować nieoczekiwane zachowanie, gdy jest wykonywane w module, w którym odwołuje się do.Na przykład rozważmy następującą procedura przechowywana, która odwołuje się procedura korzystając z jednej części nazwy.
Kiedy Proc1 zostanie wykonany, Proc2 powiązanie schematu obiektu wywołującego. Załóżmy, że Proc1 jest wykonywany przez User1, kto ma domyślny schemat S1 i wykonywany przez User2, kto ma domyślny schemat S2. Kiedy Proc1 jest wykonywany przez User1, której dotyczy odwołanie, obiekt jest rozpoznawana jako S1.Proc2. Kiedy Proc1 jest wykonywany przez User2, której dotyczy odwołanie, obiekt jest rozpoznawana jako S2.Proc2. Ze względu na to zachowanie, identyfikator Proc2 Nie można rozpoznać do Proc1 jest wykonywane w związku z tym jest kolumna is_caller_dependent zestaw 1 w funkcja widoku i sys.dm_sql_referenced_entities sys.sql_expression_dependencies. Kiedy Proc1 zostanie wykonany, Database Engine podejmie próbę wyszukania odwołania obiekt Proc2 w schemacie domyślnego obiektu wywołującego. Jeśli nie zostanie znaleziony, jest sprawdzany na schemacie dbo.Jeśli Proc2 Nie można odnaleźć w schemacie dbo, identyfikator Proc2 Nie można rozpoznać i instrukcja nie powiedzie się. Zaleca się określenie nazwy dwóch części, przy odwoływaniu się do obiektów bazy danych w celu wyeliminowania potencjalnych błędów aplikacji.
W poniższym przykładzie są zwracane każdego obiekt w bieżącej bazie danych, zawierającego odwołanie zależne od rozmówcy.
Raportowanie na obiekty, które Użyj określony UDT
W poniższym przykładzie zwraca każdego obiektu w bieżącej bazie danych, która odwołuje się do określonego typu w jego definicji.Pokazuje, że dwie procedury przechowywane za pomocą tego typu zestaw wyników.Typ jest również używany w definicji kilku kolumn w HumanResources.Employee Tabela, jednak typ nie jest w definicji kolumna obliczana, ograniczenia CHECK lub ograniczenia DEFAULT w tabeli, wiersze nie są zwracane dla tabeli.
Raportowanie zależności wyzwalacz DLL poziom serwera
Za pomocą sys.sql_expression_dependencies i sys.dm_sql_referencing_entities tylko wtedy, gdy kontekstu jest ustawiona na wzorzec bazy danych można raporty dotyczące zależności wyzwalacze DDL poziomie serwera.Podczas korzystania z funkcja sys.dm_sql_referenced_entities kontekście może być dowolną bazę danych.
The following example queries the sys.sql_expression_dependenciesview to report on server-level DDL trigger dependencies.
See Also