2012-11-26 10 views
23

Pracuję z programem SQL Server 2008 i mam bazę danych, która ma więcej niż 1500 kolumn i około 500 procedur składowanych i ....Określanie, które obiekty odwołują się do tabeli w SQL Server

Chcę zmienić nazwę tabeli, która ma kilka relacji i jest wymieniony w wielu procedury przechowywane i widoki i ....

Jak mogę uzyskać wszystkie pozycje w bazie danych, która ma związek z tej tabeli?

Dzięki.

Odpowiedz

12

Jeśli trzeba znaleźć obiekty bazy danych (na przykład tabele, kolumny, wyzwalacze) wg nazwy - ma wygląd na DARMOWE Narzędzie Red-Gate o nazwie SQL Search, które to robi - przeszukuje całą bazę danych pod kątem dowolnego rodzaju ciągów.

enter image description here

enter image description here

To świetny niezbędnym narzędziem dla każdej bazy danych DBA lub dewelopera - nie wspominając już, że to absolutnie darmo używać do każdego rodzaju użytku ??

+0

@MitchWheat: po prostu zainstaluj go w systemie SSMS i użyj kilka razy - po tym, ** nie będzie * * Już zapomnij! :-) –

30

Korzystanie sys.dm_sql_referencing_entities:

SELECT 
    referencing_schema_name, referencing_entity_name, referencing_id, 
    referencing_class_desc, is_caller_dependent 
FROM 
    sys.dm_sql_referencing_entities ('mySchemaName.myTableName', 'OBJECT'); 
GO 

'mySchemaName.myTableName' gdzie jest Twój schemat.nazwa np 'dbo.MyTable'

+0

Dzięki. Ale co to jest "mySchemaName" i "OBJECT"? – Tavousi

+2

@Tavousi - Zobacz http://msdn.microsoft.com/en-us/library/bb630351.aspx Jak widać, chcemy użyć "OBJECT'' jako drugiego parametru. Domyślnym schematem w SQL Server jest 'dbo', więc to prawdopodobnie Twój schemat. – Tobsey

+1

Jeśli to nieoczekiwanie zwraca dla ciebie 0 wierszy, należy pamiętać, że w SQL Server 2008-2012 sys.dm_sql_referencing_entites wymaga uprawnień KONTROLI dla obiektu przywoływanego do działania. Spróbuj uruchomić zapytanie jako użytkownik bazy danych z podwyższonymi uprawnieniami. –

6

To kolejne rozwiązanie, które znalazłem. Nie musisz instalować żadnych narzędzi. Po prostu uruchom na analizatorze zapytań.

Use [Database] 
Go 

SELECT 
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID), 
referencing_object_name = o.name, 
referencing_object_type_desc = o.type_desc, 
referenced_schema_name, 
referenced_object_name = referenced_entity_name, 
referenced_object_type_desc = o1.type_desc, 
referenced_server_name, referenced_database_name 
--,sed.* -- Uncomment for all the columns 
FROM 
sys.sql_expression_dependencies sed 
INNER JOIN 
sys.objects o ON sed.referencing_id = o.[object_id] 
LEFT OUTER JOIN 
sys.objects o1 ON sed.referenced_id = o1.[object_id] 
WHERE 
referenced_entity_name = 'SP_Pay_GetData' 
order by referencing_object_name 
+0

dlaczego to rozwiązanie nie zostało poddane pod głosowanie więcej? –

+0

podaj kredyt tam, gdzie jest należny https://blog.sqlauthority.com/2012/12/02/sql-server-find-referencje-lub-referencje-object-in-sql-server-using-sys-sql_expression_dependencies/ – cBlaine

Powiązane problemy