問題は何ですか?
初めて使用するデータベースや頻繁に変更されるデータベースのクエリを作成する場合は、クイックチェックを実行して、特定のデータベース内のすべてのテーブルまたはデータベース内の列を検索するか、テーブルまたは列を検索する必要があります。存在します。
なぜこれが問題なのですか?
スキーマとその中にあるテーブルを理解すると、効率的なSQLを記述し、スキーマ名または列名が正しいかどうかを確認するためだけにクエリを複数回実行することを回避できます。
このチュートリアルは、これらの問題の解決に役立ちます。
テーブルの構成をまだ理解していない場合は、データソースのメタデータをクエリするのが最も簡単な方法です。 Microsoft SQL Serverは、このメタデータを取得するためのいくつかの方法の1つとして情報スキーマビューを提供します。サポートドキュメントに記載されているように、「情報スキーマビューは、SQLServerメタデータの内部のシステムテーブルに依存しないビューを提供します。情報スキーマビューを使用すると、基盤となるシステムテーブルに大幅な変更が加えられていても、アプリケーションを正しく動作させることができます。」
データソース内のテーブルの構成を決定するのに役立つクエリを実行するために、情報スキーマのいくつかのビューを使用します。
TABLES
を表示するには およびCOLUMNS
データベースで検索するか、TABLES
を見つけてください およびCOLUMNS
。
この最初のクエリは、クエリしているデータベース内のすべてのテーブルを返します。
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
2番目のクエリは、クエリしているデータベース内のすべての列とテーブルのリストを返します。
SELECT
TABLE_NAME,
COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
または、COLUMNS
だけをクエリすることもできます 特定のテーブルから、データベース内の特定のテーブル「アルバム」から列名を返します。
SELECT
COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Album'
この次のクエリで、TABLE
があるかどうかを確認できます。 ある種の検索パラメータに一致するデータソース内。
IF EXISTS(
SELECT
*
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = 'Album'
)
SELECT 'found' AS search_result ELSE SELECT 'not found' AS search_result;
テーブル「Album」がデータベースに存在する場合、クエリは「found」という単語を返します。
もう少し詳しく説明すると、このクエリを使用して、COLUMN
があるかどうかを確認できます。 ある種の検索パラメータに一致するデータソース内。
IF EXISTS(
SELECT
*
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
COLUMN_NAME = 'Title'
)
SELECT 'found' AS search_result ELSE SELECT 'not found' AS search_result;
INFORMATION_SCHEMA
を利用する データソースでの表示は、クエリの作成中にデータソースに何があるかを判断するための信頼できる方法です。
Microsoft SQL Serverのシステム情報スキーマビューの詳細については、サポートドキュメントを参照してください。