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
3 Réponses :
Votre méthode n'est pas complètement correcte. Lire cet article: P>
http://www.msqltips.com/tip.asp?tip=1294 p>
Votre méthode ne renvoie aucun résultat si une autre vue utilise cette vue. p>
SQL Server 2008 a une vue spéciale (sys.dm_sql_referencing_enties), ce n'est pas si facile. p>
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.
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'
@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.
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%'
Est-ce que "sp_depends" ne pas aider. Je suppose que vous devriez l'exécuter sur chaque base de données.