SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

構造がわからないデータベースで検索を行うには

ストアドプロシージャ、SELECTステートメントを使って特定の内容を検索

列名を検索するためのSELECTソリューション

 データベースの構造は知っていても、テーブルや列の完全な名前は思い出せないということもあるでしょう。そんなときには、SQL Server 2000で次のSELECTステートメントを実行してください。

SELECT c.Table_Schema, c.Table_name, c.Column_name
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN INFORMATION_SCHEMA.TABLES t 
ON c.Table_schema = t.Table_SCHEMA 
AND c.Table_name = t.Table_name
WHERE TABLE_TYPE = 'BASE TABLE' AND c.Column_name LIKE <検索文字列>

 上記のスクリプトはSQL Server 2000、2005、および2008で機能します。次のスクリプトは2005および2008の新しいスキーマテーブルをベースにしており、前方互換性があります。

SELECT t.name AS TableName,
sc.name AS SchemaName,
c.name AS ColumnName,
types.name AS TypeName,
st.name AS TypeSchemaName,
t.type AS type
FROM sys.all_columns c INNER JOIN sys.all_objects t WITH (NOLOCK) ON c.object_id=t.object_id
LEFT JOIN sys.schemas sc WITH (NOLOCK) ON t.schema_id=sc.schema_id
LEFT JOIN sys.types types WITH (NOLOCK) ON c.user_type_id=types.user_type_id
LEFT JOIN sys.schemas st WITH (NOLOCK) ON st.schema_id=types.schema_id
WHERE t.type IN ('U') AND c.Column_name LIKE <検索文字列>
ORDER BY c.object_id, c.column_id

 完全な名前を思い出せないテーブルや列をSQL Serverデータベースから検索するには、次のようにしてSELECTステートメントを実行します。

SELECT c.Table_Schema, c.Table_name, c.Column_name
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN INFORMATION_SCHEMA.TABLES t 
ON c.Table_schema = t.Table_SCHEMA 
AND c.Table_name = t.Table_name
WHERE TABLE_TYPE = 'BASE TABLE' AND c.Column_name LIKE '%order%'

 図2は、Northwindに対して上記のステートメントを実行した結果です。

 ご覧のように、SELECTは「order」という文字列が含まれている列名のインスタンスをいくつか返しています。BASE TABLEはユーザーが作成したテーブルのことであり、システムテーブルではありません(information_schemaテーブル内では、テーブルはこう定義されています)。

図2 Northwindに対するSELECT検索: このSELECTステートメントで特定のカラムを検索できる
図2 Northwindに対するSELECT検索: このSELECTステートメントで特定のカラムを検索できる

おわりに

 詳細がわかっているエンティティの検索は簡単ですが、テーブルや列の名前がわからないときの検索はもっと手間がかかります。この記事で紹介したストアドプロシージャを使用すると、構造がわからないテーブルから特定の値を検索できます。また、SELECTステートメントを使用すると、パターンやキーワードに一致する名前の列を突き止めることができます。どちらのソリューションもぜひ装備したい有用なツールです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Francisco Tapia(Francisco Tapia)

 ある大手製造会社のデータベース管理者。SQL Serverはバージョン6.5の頃から使用。詳しくはsqlthis.blogspot.comを参照。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Susan Sales Harkins(Susan Sales Harkins)

 独立コンサルタントとして活動するかたわら、データベーステクノロジに関する記事や書籍を執筆。最近の著書は『Mastering Microsoft SQL Server 2005 Express』(Mike Gunderloyと共著、Sybex刊)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4283 2009/09/02 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー