Il existe un schéma appelé INFORMATION_SCHEMA
schéma qui contient un ensemble de vues sur les tables du schéma SYS que vous pouvez interroger pour obtenir ce que vous voulez.
Un avantage majeur du INFORMATION_SCHEMA
est que les noms d'objet sont très conviviaux pour les requêtes et lisibles par l'utilisateur. L'inconvénient du INFORMATION_SCHEMA
est que vous devez écrire une requête pour chaque type d'objet.
Le schéma Sys peut sembler un peu énigmatique au départ, mais il contient toutes les mêmes informations (et plus) au même endroit.
Vous commencerez avec une table appelée SysObjects (chaque base de données en a une) qui contient les noms de tous les objets et leurs types.
On pourrait chercher dans une base de données comme suit :
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
Maintenant, si vous vouliez limiter cela à la recherche de tables et de procs stockés, vous le feriez
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
Si vous recherchez des types d'objets, vous trouverez toute une liste de vues, de déclencheurs, etc.
Maintenant, si vous voulez rechercher ceci dans chaque base de données, vous devrez parcourir les bases de données. Vous pouvez effectuer l'une des actions suivantes :
Si vous souhaitez effectuer une recherche dans chaque base de données sans aucune clause, utilisez le sp_MSforeachdb comme indiqué dans une réponse ici.
Si vous souhaitez uniquement rechercher des bases de données spécifiques, utilisez la commande "USE DBName" puis recherchez.
Vous bénéficierez grandement de l'avoir paramétré dans ce cas. Notez que le nom de la base de données dans laquelle vous recherchez devra être remplacé dans chaque requête (DatabaseOne, DatabaseTwo...). Regardez ceci :
Declare @ObjectName VarChar (100)
Set @ObjectName = '%Customer%'
Select 'DatabaseOne' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseOne.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')
UNION ALL
Select 'DatabaseTwo' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseTwo.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')
UNION ALL
Select 'DatabaseThree' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseThree.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')