Det finns ett schema som heter INFORMATION_SCHEMA
schema som innehåller en uppsättning vyer på tabeller från SYS-schemat som du kan fråga för att få vad du vill ha.
En stor fördel med INFORMATION_SCHEMA
är att objektnamnen är mycket frågevänliga och användarläsbara. Nackdelen med INFORMATION_SCHEMA
är att du måste skriva en fråga för varje typ av objekt.
Sys-schemat kan verka lite kryptiskt till en början, men det har samma information (och mer) på en enda plats.
Du skulle börja med en tabell som heter SysObjects (varje databas har en) som har namnen på alla objekt och deras typer.
Man kan söka i en databas enligt följande:
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
Om du nu vill begränsa detta till att bara söka efter tabeller och lagrade processer, skulle du göra det
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
Om du slår upp objekttyper hittar du en hel lista för vyer, triggers etc.
Nu, om du vill söka efter detta i varje databas, måste du iterera genom databaserna. Du kan göra något av följande:
Om du vill söka igenom varje databas utan några klausuler, använd sedan sp_MSforeachdb som visas i ett svar här.
Om du bara vill söka i specifika databaser, använd "USE DBName" och sedan sökkommandot.
Du kommer att ha stor nytta av att ha den parametriserad i så fall. Observera att namnet på databasen du söker i måste ersättas i varje fråga (DatabaseOne, DatabaseTwo...). Kolla in det här:
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')