2010-05-17 1 views
1

Dans MS SQL 2005, est-il possible de savoir quelles tables/colonnes sont utilisées en tant que clés dans une autre table ou dans le cadre d'une procédure stockée?Comment trouvez-vous toutes les dépendances d'une table de base de données?

La raison en est que j'essaie de nettoyer certains vieux procs et tables stockés, dont certains peuvent être supprimés, dont certains peuvent être élagués. Mais évidemment, je ne veux pas supprimer les choses qui sont utilisées.

Répondre

1
DECLARE @BaseObject varchar(100) 
SET @BaseObject = 'AddEntry' 

SET NOCOUNT ON 

DECLARE @Objects TABLE (
    id int 
) 

INSERT @Objects (id) 
SELECT id FROM sysobjects 
WHERE name like @BaseObject 

WHILE (@@ROWCOUNT > 0) 
BEGIN 
    INSERT @Objects (id) 
    SELECT d.depid 
    FROM sysdepends d 
    WHERE d.id IN (SELECT id FROM @Objects) 
    AND d.depid NOT IN (SELECT id FROM @Objects) 
END 

SET NOCOUNT OFF 

SELECT convert(varchar(100), 
     '[' + oo.name + '].[' + o.name + ']') AS '--Object--' 
FROM sysobjects o 
INNER JOIN sysusers oo ON o.uid = oo.uid 
WHERE o.id IN (SELECT id FROM @Objects) 
ORDER BY oo.name, o.name 
+0

Je viens de l'essayer, très utile. – Carlos

1

Dans SQL Server 2008, il y a deux nouvelles fonctions de gestion dynamique mis en place pour garder la trace des dépendances: sys.dm_sql_referenced_entities et sys.dm_sql_referencing_entities:

1/Le retour des entités qui font référence à une entité donnée:

SELECT 
     referencing_schema_name, referencing_entity_name, 
     referencing_class_desc, is_caller_dependent 
FROM sys.dm_sql_referencing_entities ('<TableName>', 'OBJECT') 

2/de retour des entités référencées par un objet:

SELECT 
     referenced_schema_name, referenced_entity_name, referenced_minor_name, 
     referenced_class_desc, is_caller_dependent, is_ambiguous 
FROM sys.dm_sql_referenced_entities ('<StoredProcedureName>', 'OBJECT'); 

Une autre option consiste à utiliser un outil très utile appelé SQL Dependency Tracker de Red Gate.

Questions connexes