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%'
あります!特定の(または類似の)列名を持つすべてのテーブルと関連する列を検索するための簡単なクエリ。