sql >> Databáze >  >> RDS >> Sqlserver

Najít objekt v SQL Server (mezi databázemi)

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')


  1. CakePHP se nepoužije seskupení podle podmínek

  2. Oracle SQl Dev, jak vypočítat počet pracovních dnů mezi 2 daty

  3. zálohování souborů na disk Google pomocí PHP

  4. Jak získám hibernaci, abych vygeneroval syntaxi Oracle FOR UPDATE WAIT 10