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

SQLServerで特定の列を含むテーブルを見つける方法

    SQL Serverは、リレーショナルデータベースとしては非常に強力ですが、データベースシステム自体に関する基礎となる情報を検索する場合、多少気が遠くなることがあります。

    これらの頭痛の種を少しでも軽減するために、特定の列名を含むデータベース内のすべてのテーブルを見つける方法を簡単に説明します。 。

    SQLServerカタログビュー

    SQL Serverについて理解するための基本的な概念の1つは、catalog viewsの概念です。 、これは事実上データベーステーブルです(catalogs この場合)SQLServerデータベースエンジンに関するシステム全体の情報を表示します。

    システム情報のクエリ

    すべてのcatalog views SELECTを介してアクセスします SQLステートメントFROM sys.内の特定のカタログ 名前空間。

    たとえば、次のステートメントを使用して、sys.tablesを介してシステム内のすべてのデータベーステーブルに関する情報を表示できます。 カタログ:

    SELECT
      *
    FROM
      sys.tables
    

    LIKEステートメントとワイルドカード文字

    特定の名前のすべてのテーブルを抽出する方法に入る前に、LIKEが何であるかを簡単に調べる必要があります。 ステートメントは、ワイルドカード(%)と同様に機能します )記号、およびそれらがどのように一緒に使用されるか。

    LIKE 文字の特定のパターン(通常は指定されたcolumnの値)かどうかを判断するためにクエリで使用されます )フォーマットされた文字列と一致します。

    LIKE 多くの場合、%と組み合わせて使用​​されます パターンに一致させようとするときのワイルドカードを表す文字。 %の場合 パターン文字列にワイルドカード文字が含まれている場合は、任意であることを示します パターン文字列のその場所に文字が存在していても、一致すると見なされる場合があります。

    たとえば、titleが含まれるすべての書籍を検索する場合 開始 「The」を使用しますが、それ以降は任意の文字を含めることができるため、次のようなステートメントを使用します。

    SELECT
      title,
      primary_author,
      published_date
    FROM
      books
    WHERE
      title LIKE 'The %'
    

    注意深い読者は、上記のパターンが最初に「The」が付いているタイトルだけでなく、単に3文字の「The」で始まる単語を含むタイトルにも一致することに気付くかもしれません。 %以降 ワイルドカードはどの文字とも一致します。「The」という単語が含まれるタイトルのみを確認する場合は、スペースを追加する方が適切です。

    SELECT
      title,
      primary_author,
      published_date
    FROM
      books
    WHERE
      title LIKE 'The %'
    
    列名を含むテーブルの選択

    両方のcatalog viewsに関する基本的な知識があります およびLIKE これで、特定の列名を含むシステム内のすべてのテーブルを検索できるようになりました。

    SELECT
      sys.columns.name AS ColumnName,
      tables.name AS TableName
    FROM
      sys.columns
    JOIN sys.tables ON
      sys.columns.object_id = tables.object_id
    WHERE
      sys.columns.name = 'ColumnName'
    

    2つの情報を組み合わせる必要があります カタログ、sys.tables およびsys.columns 、したがって、JOINを使用しています 声明。 2つはobject_idによって関連付けられています フィールドなので、JOIN その分野で。

    そこから、ColumnNameを選択するだけです。 およびTableName 結果の結果、そして最後に、もちろん、sys.columns.nameのレコードのみを検索します ColumnNameと同じです 文字列。

    ただし、このクエリは完全一致のみを検索します 列名の。部分一致を検索する場合は、LIKEを使用できます および% 代わりにワイルドカード文字:

    SELECT
      sys.columns.name AS ColumnName,
      tables.name AS TableName
    FROM
      sys.columns
    JOIN sys.tables ON
      sys.columns.object_id = tables.object_id
    WHERE
      sys.columns.name LIKE '%ColumnName%'
    

    あります!特定の(または類似の)列名を持つすべてのテーブルと関連する列を検索するための簡単なクエリ。


    1. PostgreSQLはより多くの出力を無効にします

    2. Ubuntu16.04でのMariaDB10.0から10.3.9へのアップグレード

    3. SQLServerアカデミーセッションでのMicrosoftAccessに参加する

    4. MySQLポートアクセスを制限する方法