Existuje schéma nazvané INFORMATION_SCHEMA
schema, které obsahuje sadu pohledů na tabulky ze schématu SYS, na které se můžete dotazovat, abyste získali, co chcete.
Významná výhoda INFORMATION_SCHEMA
je, že názvy objektů jsou velmi přátelské k dotazům a uživatelsky čitelné. Negativní stránka INFORMATION_SCHEMA
je, že musíte napsat jeden dotaz pro každý typ objektu.
Schéma Sys se může zpočátku zdát trochu záhadné, ale obsahuje všechny stejné informace (a více) na jednom místě.
Začali byste tabulkou nazvanou SysObjects (každá databáze má jednu), která obsahuje názvy všech objektů a jejich typy.
V databázi lze vyhledávat následovně:
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
Pokud byste to chtěli omezit na vyhledávání pouze tabulek a uložených procesů, udělali byste
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
Pokud vyhledáte typy objektů, najdete celý seznam pohledů, spouštěčů atd.
Nyní, pokud to chcete hledat v každé databázi, budete muset procházet databázemi. Můžete provést jednu z následujících akcí:
Pokud chcete prohledávat každou databázi bez jakýchkoli klauzulí, použijte sp_MSforeachdb, jak je uvedeno v odpovědi zde.
Pokud chcete prohledávat pouze konkrétní databáze, použijte příkaz "USE DBName" a poté příkaz hledat.
V takovém případě budete mít velký prospěch z jeho parametrizace. Všimněte si, že název databáze, ve které hledáte, bude muset být nahrazen v každém dotazu (DatabaseOne, DatabaseTwo...). Podívejte se na toto:
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')