Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menemukan objek di SQL Server (cross-database)

Ada skema yang disebut INFORMATION_SCHEMA skema yang berisi sekumpulan tampilan pada tabel dari skema SYS yang dapat Anda kueri untuk mendapatkan apa yang Anda inginkan.

Keuntungan utama INFORMATION_SCHEMA adalah bahwa nama objek sangat ramah permintaan dan dapat dibaca pengguna. Kelemahan dari INFORMATION_SCHEMA adalah Anda harus menulis satu kueri untuk setiap jenis objek.

Skema Sys mungkin tampak sedikit samar pada awalnya, tetapi memiliki semua informasi yang sama (dan lebih banyak lagi) di satu tempat.

Anda akan mulai dengan tabel bernama SysObjects (setiap database memiliki satu) yang memiliki nama semua objek dan tipenya.

Seseorang dapat mencari di database sebagai berikut:

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

Sekarang, jika Anda ingin membatasi ini hanya untuk mencari tabel dan proses tersimpan, Anda harus melakukannya

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

Jika Anda mencari jenis objek, Anda akan menemukan daftar lengkap untuk tampilan, pemicu, dll.

Sekarang, jika Anda ingin mencari ini di setiap basis data, Anda harus mengulanginya melalui basis data. Anda dapat melakukan salah satu hal berikut:

Jika Anda ingin menelusuri setiap basis data tanpa klausa apa pun, gunakan sp_MSforeachdb seperti yang ditunjukkan dalam jawaban di sini.

Jika Anda hanya ingin mencari database tertentu, gunakan "USE DBName" dan kemudian cari perintah.

Anda akan sangat diuntungkan dengan parameterisasi dalam kasus itu. Perhatikan bahwa nama database yang Anda cari harus diganti di setiap kueri (DatabaseOne, DatabaseTwo...). Lihat ini:

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. VALUES Clause di SQL Server

  2. Cara tercepat untuk mengidentifikasi variasi Prosedur Tersimpan yang paling sering digunakan di SQL Server 2005

  3. Cara mendekode string unicode base64 menggunakan T-SQL

  4. Apa yang menyebabkan sintaks yang salah di dekat <nama prosedur tersimpan> di EF Code First dan SQL 2005?

  5. Mendapatkan kesalahan saat menyimpan data di sql server 2005 melalui kotak teks