Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znajdź obiekt w SQL Server (międzybaza danych)

Istnieje schemat o nazwie INFORMATION_SCHEMA schemat, który zawiera zestaw widoków tabel ze schematu SYS, o które możesz zapytać, aby uzyskać to, czego chcesz.

Główna zaleta INFORMATION_SCHEMA jest to, że nazwy obiektów są bardzo przyjazne dla zapytań i czytelne dla użytkownika. Wadą INFORMATION_SCHEMA jest to, że musisz napisać jedno zapytanie dla każdego typu obiektu.

Schemat Sys może początkowo wydawać się nieco tajemniczy, ale zawiera wszystkie te same informacje (i więcej) w jednym miejscu.

Zacząłbyś od tabeli o nazwie SysObjects (każda baza danych ma jedną), która zawiera nazwy wszystkich obiektów i ich typy.

W bazie danych można wyszukiwać w następujący sposób:

Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
    and [Name] like '%YourObjectName%'

Teraz, jeśli chcesz ograniczyć to tylko do wyszukiwania tabel i przechowywanych procesów, zrobisz to

Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
    and [Name] like '%YourObjectName%'
    and Type in ('U', 'P')

Jeśli wyszukasz typy obiektów, znajdziesz całą listę widoków, wyzwalaczy itp.

Teraz, jeśli chcesz szukać tego w każdej bazie danych, będziesz musiał przejść przez bazy danych. Możesz wykonać jedną z następujących czynności:

Jeśli chcesz przeszukać każdą bazę danych bez żadnych klauzul, użyj sp_MSforeachdb, jak pokazano w odpowiedzi tutaj.

Jeśli chcesz przeszukać tylko określone bazy danych, użyj "USE DBName", a następnie polecenia wyszukiwania.

W takim przypadku bardzo skorzystasz na parametryzacji. Zauważ, że nazwa bazy danych, w której szukasz, będzie musiała zostać zastąpiona w każdym zapytaniu (DatabaseOne, DatabaseTwo...). Sprawdź to:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kosztorysowanie zapasów według metody FIFO

  2. Problem z technologią Intellisense w programie SQL Server 2008

  3. Zmiana formatu daty w bazie danych SQL Server, a nie na całym serwerze na dd/mm/rrrr

  4. użyj 'pomiędzy' z varchar (serwer sql)

  5. Jak mogę zrobić klucz podstawowy jako AUTOINCREMENT?