SQLSever データベース

【SQLServer】既存のテーブルにカラムを追加・変更・削除(ALTER TABLE)

SQLServerで既存のテーブルに対してカラムを追加、変更、削除する方法をここにメモしておきます。

 

・カラムの追加

-- 構文
ALTER TABLE [テーブル名] ADD [カラム名] [データ型] [NULL or NOT NULL DEFAULT ××];
-- 例
ALTER TABLE user ADD NAME_KANA nvarchar(60) NOT NULL DEFAULT '';

上記のSQLによって、テーブルの一番右側にカラムが追加されます。

残念ながらALTER TABLE文ではカラム位置を指定して追加することができないようです。

注意点として、新規でカラムを追加する場合「NOT NULL」のみの設定ができません。解決法としては記事下の※1を参照ください。

 

・カラムの変更

-- 構文
ALTER TABLE [テーブル名] ALTER COLUMN [新しいカラム名] [新しいデータ型];
-- 例)カラム名変更
ALTER TABLE user ALTER COLUMN KANA;
-- 例)データ型変更
ALTER TABLE user ALTER COLUMN NAME_KANA nvarchar(100);

・カラムの削除

-- 構文
ALTER TABLE [テーブル名] DROP COLUMN [カラム名];
-- 例
ALTER TABLE user DROP COLUMN NAME_KANA;

注意ポイント

新規でカラムを追加するとき「NOT NULL」のみの設定はできず、NULLを許可するか、またはNOT NULLとデフォルト値の両方を設定することしかできません。

解決策としては、例えば文字列型のカラムの場合一旦「NOT NULL DEFAULT ''」をカラムを追加しておき、その後「NOT NULL」に変更する方法がベターです。

 SQL
-- 一旦デフォルト値を設定してカラム追加
> ALTER TABLE user ADD NAME_KANA nvarchar(6) NOT NULL DEFAULT '';
-- 全レコードのNAME_KANAを「hoge」に更新
-- ※ここはシステムの仕様によって適宜、適当な値を入れてください。
> UPDATE user SET NAME_KANA ='hoge'; -- NOT NULLに変更 ALTER TABLE user ALTER COLUMN NAME_KANA nvarchar(6) NOT NULL;

以上です。

-SQLSever, データベース