Существует схема Information_Schema, представляющая собой набор представлений таблиц из схемы SYS, к которым вы можете обратиться, чтобы получить то, что вам нужно.
Недостатком Information_Schema является то, что вы должны написать один запрос для каждого типа объекта. Плюс в том, что Information_Schema удобнее для чтения.
Схема Sys изначально будет казаться немного загадочной, но в одной и той же информации она содержится.
По сути, в каждой базе данных есть таблица с именем SysObjects, в которой указаны имена всех объектов и их типы.
Итак, вы хотите искать в базе данных следующим образом:
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
Теперь, если вы хотите ограничить это только поиском таблиц и хранимых процедур, вы должны сделать
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
Если вы посмотрите на типы объектов, вы найдете целый список представлений, триггеров и т. Д.
Теперь, если вы хотите найти это в каждой базе данных, вам придется перебирать базы данных. Вы можете сделать одно из следующего:
Если вы хотите выполнить поиск в каждой базе данных без каких-либо предложений, используйте sp_MSforeachdb, как показано в ответе здесь.
Если вы хотите выполнять поиск только в определенных базах данных, используйте «ИСПОЛЬЗОВАТЬ DBName», а затем команду поиска.
В этом случае вы получите большую пользу от параметризации. Обратите внимание, что имя базы данных, в которой вы ведете поиск, будет заменяться в каждом запросе (DatabaseOne, DatabaseTwo ...). Проверьте это:
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')