受講料が最大70%OFF 受講料が最大70%OFF

複数人で同時に開発を行うような案件ではカラム名がすぐにわからないことなどがありますが、そういった場合に一覧を出力してくれるのがシステムビューです。

今回の記事ではビューの定義と二つのシステムビュー「sys.objects」と「sys.columns」について解説をしていこうと思います。

この方法をマスターすれば簡単にカラム名一覧を列挙することが出来るので、是非最後まで読んでみてください。

ビューとは

SQL Serverにはシステムビューの他にも、インデックスビューやパーティションビューなどがありますが、そもそもデータベースにおける「ビュー」とは何でしょう?

ビューとは簡潔に言い表すと仮想テーブルだと思ってください。

実際に存在するデータベーステーブルではないので、データなどが入っているわけではありません。

ビューをSELECT文で定義すると、実テーブルから必要なデータが抽出され、その情報を基にした仮想テーブルがメモリに蓄積されます。

これによって独自のテーブルがあるかのように見ることが出来る仕組みとなっています。

ビューのメリット

定義というだけあって、ビューはクエリで自由に作ることが可能です。

また聞くだけだとちょっと理解が難しいかもしれませんが、ビューでビューを定義することも可能です。

このことから、毎回記述するのことが面倒で複雑なクエリーがあったとしても、これをビューとして定義しておけば、その後は簡単なクエリーで呼び出しが出来るようになります。

規模が大きくなればなるほど開発に係る労力は計り知れませんので。その効果も絶大となってきます。

また他にも、一般ユーザーにデータベース内のデータを使用させるような場合には、ビューを使用することで開発側が操作することも可能です。

通常、一般ユーザーには権限の付与は出来ない為、データベース内の見せたくないデータなどを選んで隠すことは出来ません。

しかしビューを作成する段階で見せたくないデータだけを排除した仮想テーブルを作成すれば、このビューを使わせることで間接的にテーブルを操作することが可能になります。

sys.objects

sys.objects」とは何か?について初心者の方にわかりやすく全てを説明することは非常に難しいのですが、簡単に言ってしまうと「データベース内にある全オブジェクト毎の情報を管理できるモノ」です。

SQLでいうオブジェクトとは、テーブルや列の他にもスキーマやジャーナル、カタログ、制約、ストアドプロシージャ、関数、変数などありとあらゆるものを指します。

この記事ではsys.objectsを使用することで、テーブルや列そのものを検索することが出来るとだけ覚えておいてください。

この「sys.objects」を使い慣れてきたときに改めてリファレンスを読めば、もう少し掘り下げて理解できると思います。

sys.objectsの使い方

sys.objectsには様々な項目が設けられていますが、今回はこの項目の中の「type」を利用します。

このtypeはオブジェクトの種類を指定する項目で、テーブルの検索をする場合、typeは「U」となります。

仮にデータベース内のテーブルをくまなく検索したい場合には次のように記述します。

SELECT * FROM sys.objects WHERE type = 'U'

sys.column

sys.columnsは、ビューやテーブルなどの列を持つオブジェクトから列の情報を返します。

列を持つオブジェクトには次のようなものがあります。

またこのsys.columnsにも非常に多くの項目が用意されているため、 全て覚えようとするのではなく、利用するケースによってリファレンスに目を通しながら選択してください。

sys.columnsを使った例として、テーブルを指定してカラム一覧を取得する方法が次のコードです。

SELECT
	*
FROM
	sys.columns
WHERE
	object_id = (
		SELECT
			object_id
		FROM
			sys.tables
		WHERE
			name = 'テーブル名'
	)

必要な情報を取得する

sys.objects」と「sys.columns」についての解説である程度理解してもらえたともいますが、この二つの情報をそのまま取得することは無駄が多すぎるため、情報を選別して取得する必要があります。

例えば、基本的なところでカラムに対して最も必要と思われるのは次の3つの項目ではないでしょうか?

仮にこの3項目が欲しい場合にsys.columnsでそのまま取得してしまうと、情報量多さから逆に解り難くなるので次のように整形します。

USE sample_db

SELECT
	t.name                  AS テーブル名,
	c.name                  AS 項目名,
	type_name(user_type_id) AS 属性,
	max_length              AS 長さ,
	CASE
		WHEN
			is_nullable = 1
		THEN
			'YES'
		ELSE
			'NO'
	END AS NULL許可
FROM
	sys.objects t
    INNER JOIN sys.columns c ON
		t.object_id = c.object_id
WHERE
	t.type = 'U'
AND
	t.name IN ('sample_table', 'stuff_table')
ORDER BY
	c.column_id
GO

テーブル名		項目名		属性			長さ		NULL許容
--------------- ---------- ------------ ------- ----------
sample_table	id			int			4		NO
stuff_table		stuff_id	int			4		NO
stuff_table		stuff_name	nchar		20		YES
sample_table	name		nchar		60		YES
sample_table	age			int			4		YES
stuff_table		stuff_age	int			4		YES
stuff_table		stuff_no	nchar		40		YES
sample_table	sex			nchar		60		YES
sample_table	job			nchar		60		YES

ポイントは「sys.objects」と「sys.columns」両方のビューをINNER JOINで紐づけて一つの仮想テーブルにしている点です。

sys.columnsのみではテーブル名は取得できない為、複数のテーブルの情報を同時に取得するような場合には不十分なリスト(同一列名がある場合などが挙げられる)となります。

しかしsys.objectsと併用することで、sys.objectsの持つ項目も使えるようになるため、テーブル名も同時に取得することが出来ます。

結果、テーブル名と項目名に続いて先ほど挙げた3項目をリスト化できるため、非常に扱いやすい形となっていることが確認できます。

まとめ

今回は列名の取得について、実践で使えるレベルのサンプルコードを交えながら解説を行ってきましたが、いかがでしたか?

初心者の方にとってはリファレンスのような解り難い説明を読むだけでも苦労すると思いますので、こういった応用まで頭が回らないことが多いと思います。

しかし実際には単独で使用するケースはあまりなく、それぞれを組み合わせて使うことで一つの形となるため、出来るだけこういったケースに慣れていくようにしましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。