web-dev-qa-db-fra.com

Déterminer quels objets référencent une table dans SQL Server

Je travaille avec SQL Server 2008 et j'ai une base de données qui compte plus de 1500 colonnes et environ 500 procédures stockées et ....

Je veux renommer une table qui a plusieurs relations et qui est référencée dans de nombreuses procédures et vues stockées et ....

Comment puis-je obtenir tous les éléments de la base de données qui ont une relation avec cette table?

Merci.

28
Tavousi

Si vous avez besoin de trouver des objets de base de données (par exemple des tables, des colonnes, des déclencheurs) par nom - jetez un œil au [~ # ~] gratuit [~ # ~] Outil Red-Gate appelé SQL Search qui fait cela - il recherche toute votre base de données pour tout type de chaîne (s).

enter image description here

enter image description here

C'est un excellent outil indispensable pour tout DBA ou développeur de base de données - ai-je déjà mentionné qu'il est absolument [~ # ~] gratuit [~ # ~] pour utiliser pour tout type d'utilisation ??

12
marc_s

En utilisant 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' est votre schéma.table, par exemple 'dbo.MyTable'

40
Mitch Wheat

C'est une autre solution que j'ai trouvée. Vous n'avez pas besoin d'installer d'outils. Il suffit de lancer l'analyseur de requêtes.

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
11