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