9
votes

Trouver toutes les références à voir

J'ai diverses bases de données et que vous êtes sûr que je supprime quelque chose (une vue dans ce cas) qui est vraiment orphelinée. Est le bon SQL d'utiliser:

SELECT t.*
  FROM SYSCOMMENTS t
 WHERE CHARINDEX('my_view_name', t.text) > 0


1 commentaires

Est-ce que "sp_depends" ne pas aider. Je suppose que vous devriez l'exécuter sur chaque base de données.


3 Réponses :


1
votes

Votre méthode n'est pas complètement correcte. Lire cet article:

http://www.msqltips.com/tip.asp?tip=1294

Votre méthode ne renvoie aucun résultat si une autre vue utilise cette vue.

SQL Server 2008 a une vue spéciale (sys.dm_sql_referencing_enties), ce n'est pas si facile.


2 commentaires

Si vous souhaitez utiliser SYSCOMMENTS et obtenir le nom d'objet: Sélectionnez Object_Name (T.ID), t. * À partir de SYSCOMMENTS T Où Charindex ('v_miejsce', T.Text)> 0


@Lukled: Je ne voulais pas, je voulais juste savoir ce qui est préférable à utiliser. La réponse de GBN, ce n'est pas le cas.



1
votes

Je ne suis pas sûr, mais je suppose que vous pouvez utiliser quelque chose comme ceci si votre vue est utilisée dans une procédure stockée

SELECT *  
FROM syscomments c  
INNER JOIN sysobjects o ON c.id =o.id 
WHERE text LIKE '%my_view_name%' AND xtype ='p'


1 commentaires

@Neil: la colonne de texte est tronquée aux 1er 4 000 caractères afin que la chaîne que vous recherchez n'est pas entièrement dans cette limite de caractères, le SQL reviendra un faux négatif.



26
votes

Vous avez une option uniquement.

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


0 commentaires