Webサイト制作コースのお申し込みはこちら

データベーステーブルからレコードを削除するには「DELETE」を使いますが、列を削除することは出来ません。

列の削除に使うクエリは「ALTER TABLE」と「DROP COLUMN」を使用します。

そこで今回は、テーブルから列を削除するこの二つのクエリについて解説を行っていきたいと思います。

SELECT、INSERT、UPDATE、DELETEという4つの基本クエリほど重要性は高くありませんが、これらを覚えたら次はALTER TABLEを使ったクエリを覚えておくとスムーズに学習を進めることが出来ます。

是非この記事を機会に覚えてみましょう!

ALTER TABLEについて

まず冒頭で述べた「ALTER TABLE」についての基本的知識を学習しましょう。

“ALTER TABLE”とは、テーブルの定義変更する場合に使用するクエリです。

分かりやすく言うと、列と制約(INDEXやPRIMARY KEYなど)を追加 / 変更 / 削除することが出来ます。

このほかにも、ALTER TABLEを使用することでパーティションを再構築したり、制約やトリガーを無効化したり有効化したりも出来ます。

DROP COLUMNを使う

さて、冒頭でも述べた通りデータベーステーブルから列を削除する場合には「DROP COLUMN」を使用します。

記述方法は次の通りです。

ALTER TABLE [テーブル名]
DROP COLUMN [カラム名];

記述はたったこれだけです。

これでデータベーステーブルから列を削除することが出来ます。

どのクエリにも言えることですが、SQLコマンドは至ってシンプルなのですぐ覚えられるのも魅力の一つです。

では実際にサンプルコードで実験してみましょう。

// 今回の実験で使用するデータベーステーブルの構造
no          name       age
----------- ---------- -----------

ALTER TABLE sample_table
DROP COLUMN name;
SELECT * FROM sample_table
GO

no          age
----------- -----------

このサンプルコードでは、実験用に”sample_table”というテーブル名でデータベーステーブルを作成しています。

ALTER TABLEに続いてDROP COLUMNを使用することで、データベーステーブルから「name」という列が削除されていることが確認できました。

default制約の付いたカラムを削除する

ここまでは”ALTER TABLE”と”DROP COLUMN”の基本的な使い方について解説しましたが、この使い方では削除できないカラムというものが存在します。

それはdefault制約付きのカラムです。

DELETEは次の条件に該当するカラムは削除できないことになっています。

このことから、次のコードのようなdefault値が設定されているカラムは削除できません。

// 今回のサンプルコードで使用するテーブル
// flugにはdefault制約を設定
no          name       age         flug
----------- ---------- ----------- -----------
          1 Alex                25           1
          2 Tomath              30           1
          3 Sophia              21           1
          4 Gordon              24           1
          5 Alisia              28           1

ALTER TABLE sample_table
DROP COLUMN flug;
GO
メッセージ 5074、レベル 16、状態 1、サーバー DESKTOP-T3J7G2K\SQLEXPRESS、行 1
オブジェクト 'DF_sample_table_default' は 列 'flug' に依存しています。
メッセージ 4922、レベル 16、状態 9、サーバー DESKTOP-T3J7G2K\SQLEXPRESS、行 1
ALTER TABLE DROP COLUMN flug は失敗しました。1 つ以上のオブジェクトがこの 列 を参照しています。

default制約を設定している列を削除しようとするとこのようなエラーが排出されます。

これを解決するには、列に設定されている制約を削除する必要があります。

default制約のついた列を探す

今回のように予めdefault制約がついている列がわかっていれば苦労はしませんが、実際の現場ではDB仕様書がないデータベースを引き継いだ場合や共同作業で同時進行しているケースなど、制約の有無がはっきりしない方が多いと思います。

そこでまずはデータベーステーブルの中でdefault制約が設定されている列を探し出す方法から紹介します。

default制約は次のSQLコマンドで検索することが出来ます。

SELECT 
	COLUMN_NAME,
	DATA_TYPE, 
	COLUMN_DEFAULT ← このスキーマコレクションでdefault制約の有無をチェックする
FROM 
	INFORMATION_SCHEMA.COLUMNS
ORDER BY
	TABLE_NAME, ORDINAL_POSITION
GO

// 結果
COLUMN_NAME DATA_TYPE COLUMN_DEFAULT
----------- --------- --------------
no          int       NULL 
name        nchar     NULL 
age         int       NULL
flug        int       ((1))

結果で表示されている一覧の中で最後の列がdefault制約が設定されているかどうかの判定となります。

“NULL”と表示されている場合にはdefault制約は設定されていません。

今回はflugにdefault制約を付加しているため、flugの行に「((1))」と表示されていることが確認できます。

なお「((1))」と表示されているのは、default制約で1という数値が設定されているためです。

これで下準備は整ったので、次からは制約の削除の方法について解説していきます。

制約を取得する

まず制約を削除するためには「制約名」を取得する必要があります。

制約名の取得にはテーブルIDとカラムIDが必要となるため、2段階に分けてこれらのIDを取得していきます。

テーブルIDの取得

まずはテーブルIDの取得方法です。

スキーマコレクションが用意されているため、次のコマンドで取得できます。

SELECT
	id
FROM
	sys.sysobjects
WHERE
	xtype = 'U'
AND
	name = '[table_name]'

[table_name]の部分には検索をかけたいデータベーステーブル名を入力してください。

カラムIDの取得

テーブルIDが取得出来たら続いてカラムIDの取得です。

先ほど行ったdefault制約がついている列の確認でflugにdefaultがついていることが確認できたので、この列名を使いカラムIDを取得していきます。

取得方法については次の通りです。

SELECT
	column_id
FROM
	sys.columns
WHERE
	object_id = [table_id]
AND
	name = '[column_name]'

[table_id]には先ほど取得したテーブルIDを入力します。

[column_name]には、default制約の設定がされていた列名を入力します。

制約名の取得

これでテーブルIDとカラムIDの両方が揃ったので、最後にこの二つを使い制約名を取得します。

SELECT
	name
FROM
	sys.sysobjects
WHERE
	id = (
		SELECT
			constid
		FROM
			sys.sysconstraints 
		WHERE
			id = [table_id] AND colid = [column_id]
		)

[table_id]と[column_id]には先ほど取得した各IDを入力します。

列の制約を削除

制約名が判明したので、この制約名を使い列から制約を削除します。

ALTER TABLE [table_name]
DROP CONSTRAINT
	[制約名]

制約の削除が完了したので列を削除することが出来るようになりました。

まとめ

いかがでしたか?

今回はコマンドで列を削除する方法について解説してみました。

コマンドからの作業はあまりないので「覚える必要があるのか?」と疑問を持った方もいらっしゃると思いますが、少ないとは言え、全くないわけではありません。

また資格を目指すなら確実に必要になってくる知識でもありますので、これを機会にしっかりと覚えておくようにしましょう。

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

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

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

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

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

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

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

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

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

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

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