sql >> データベース >  >> RDS >> Sqlserver

SQLServerのINFORMATION_SCHEMAビュー|テーブルが存在するかどうかを確認します

    問題は何ですか?

    初めて使用するデータベースや頻繁に変更されるデータベースのクエリを作成する場合は、クイックチェックを実行して、特定のデータベース内のすべてのテーブルまたはデータベース内の列を検索するか、テーブルまたは列を検索する必要があります。存在します。

    なぜこれが問題なのですか?

    スキーマとその中にあるテーブルを理解すると、効率的な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のシステム情報スキーマビューの詳細については、サポートドキュメントを参照してください。


    1. SQL Server 2008 Management Studioでテキストまたはvarchar(MAX)列のコンテンツ全体を表示するにはどうすればよいですか?

    2. T-SQLを使用して日時の時刻を取得しますか?

    3. Oracleデータベース内のすべての関数とプロシージャのリストを取得します

    4. MySQLWorkbenchで図からスクリプトを生成する方法