INFORMATION_SCHEMA
というスキーマがあります 必要なものを取得するために照会できる SYS スキーマからのテーブルのビューのセットを含むスキーマ。
INFORMATION_SCHEMA
の大きな利点 オブジェクト名が非常にクエリしやすく、ユーザーが読みやすいことです。 INFORMATION_SCHEMA
の欠点 オブジェクトの種類ごとに 1 つのクエリを作成する必要があります。
Sys スキーマは最初は少し分かりにくいように見えるかもしれませんが、同じ情報 (およびそれ以上) がすべて 1 つの場所に含まれています。
すべてのオブジェクトの名前とそのタイプを含む SysObjects というテーブル (各データベースに 1 つあります) から始めます。
次のようにデータベースを検索できます:
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
ここで、テーブルとストアド プロシージャのみを検索するようにこれを制限したい場合は、そうします
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
オブジェクト タイプを調べると、ビュー、トリガーなどの完全なリストが見つかります。
各データベースでこれを検索する場合は、データベースを反復処理する必要があります。次のいずれかを行うことができます:
句を使用せずに各データベースを検索する場合は、こちらの回答に示されているように sp_MSforeachdb を使用してください。
特定のデータベースのみを検索する場合は、「USE DBName」を使用してから検索コマンドを使用します。
その場合、パラメータ化することで大きなメリットが得られます。検索するデータベースの名前は、各クエリ (DatabaseOne、DatabaseTwo...) で置き換える必要があることに注意してください。これをチェックしてください:
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')