2009-10-18 6 views

Répondre

4

Vous pouvez utiliser sys.sql_dependencies:

select object_name(object_id),* 
from sys.sql_dependencies 
where referenced_major_id = object_id('<tablename>'); 

Ceci listera tous les objets qui dépendent de votre table, vous pouvez limiter ce à vue en se joignant à contre sys.views:

select v.* 
from sys.sql_dependencies d 
join sys.views v on d.object_id = v.object_id 
where referenced_major_id = object_id('<tablename>'); 
+0

Cette sys.sql_dependencies est obsolète dans les versions ultérieures + est-elle fiable? Voir ma réponse s'il vous plaît ... – gbn

+0

sysdepends est le déprécié. sql_dependencies a été introduit en 2005 et afaik n'est pas obsolète. Les articles d'Aaron passent en revue les différentes questions plus en profondeur que je ne pourrais le faire ici. Mon opinion est que le suivi de la dépendance aux métadonnées est trop fragile et la bonne pratique consiste à suivre les dépendances au niveau du contrôle des sources de développement. Par exemple. VSTS Database Edition GDR R2 fait un meilleur travail à ce sujet: http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&displaylang=fr. –

0

Voici quelques-uns des exemples de la link fournies par des inconnus (dans le cas où le site disparait avant stackoverflow ne)

Pour SQL Server 2005, faites un clic droit sur le nom de la table et sélectionnez « Afficher dépendances »

Un couple de SQL uniquement des méthodes mentionnées pour SQL Server:

SELECT routine_name, routine_type FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE ROUTINE_DEFINITION LIKE '%Employee%' 

EXEC sp_depends @objname = N'HumanResources.Employee' ; 
+0

ROUTINES contient des fonctions et procédures, mais pas les vues que la question demande. sp_depends fonctionnera, mais liste plus que juste les vues. – Andomar

+0

Aucune n'est fiable: voir ma réponse – gbn

4

Vous devez code de recherche et vous avez deux options seulement. Voir les commentaires ci-dessous pourquoi les autres méthodes ne sont pas fiables.

select 
    object_name(m.object_id), m.* 
from 
    sys.sql_modules m 
where 
    m.definition like N'%my_view_name%' 

ou utiliser OBJECT_DEFINITION

syscomments et INFORMATION_SCHEMA ont des colonnes nvarchar (4000). Donc, si "myViewName" est utilisé à la position 3998, il ne sera pas trouvé. syscomments a plusieurs lignes mais ROUTINES tronque.

Dans SQL Server 2000, sys.depends n'était pas fiable, ce qui affectait les «dépendances d'affichage» dans les menus. Je ne sais pas si c'est mieux dans SQL 2005+. Exemple: view utilise table, table est supprimée et recréée, a objectid différent, dependency = broken.

+0

Dépendances sont encore faciles à rompre en 2005 et 2008. J'ai écrit un article à ce sujet l'année dernière: http://is.gd/4pqU8 –

1

Dans SQL Server 2005, vous pouvez utiliser une combinaison de sys.sql_dependencies et d'analyse par force brute du texte de l'objet (comme dans la réponse de gbn). Pour plus d'informations sur les dépendances SQL Server 2005, voir http://msdn.microsoft.com/en-us/library/ms345449(SQL.90).aspx

Dans SQL Server 2008, il y a de nouvelles DMVs de dépendance et des vues de catalogue qui sont un peu plus fiable que les méthodes précédentes (sys.dm_sql_referenced_entities/sys.dm_sql_referencing_entities/sys.sql_expression_dependencies) , mais il est toujours facile de les casser.

Voir this article pour quelques idées pour que cela fonctionne mieux. Voir aussi http://msdn.microsoft.com/en-us/library/bb677168.aspx

+0

@kmoormann merci pour l'édition, cela remonte à –

Questions connexes