既存テーブルを変更したいときは?SQL Server ALTER TABLE文の基本と実践操作を解説
テーブルを作成した後に「列を追加したい」「データ型を変更したい」「制約を追加したい」といったケースはよくあります。
そんなときに使うのが ALTER TABLE文 です。
この記事では、列の追加・変更・削除から、PRIMARY KEYやFOREIGN KEYなどの制約操作まで、実務で使えるALTER TABLEの基本を初心者向けにわかりやすく解説します。
目次
ALTER TABLE文とは?
基本構文
ALTER TABLE文は、既存のテーブル構造を変更するためのSQLコマンドです。
CREATE TABLEで作成したテーブルに対して、列や制約を後から追加・変更・削除できます。
ALTER TABLE テーブル名
{ ADD | ALTER | DROP } 操作内容;
操作対象によって構文が異なるため、代表的なパターンを次の章で紹介します。
列を追加する(ADD COLUMN)
1列を追加する
既存テーブルに新しい列を追加する場合は ADD を使います。
ALTER TABLE Customers
ADD Phone NVARCHAR(20);
この例では、Customersテーブルに Phone 列が追加されます。
複数列を一度に追加する
ALTER TABLE Customers
ADD ZipCode NVARCHAR(10),
IsActive BIT DEFAULT 1;
複数列を追加する場合はカンマで区切って指定できます。
列を変更する(ALTER COLUMN)
データ型を変更する
既存列のデータ型やサイズを変更する場合は ALTER COLUMN を使います。
ALTER TABLE Customers
ALTER COLUMN Name NVARCHAR(100);
ただし、変更前のデータと新しい型の互換性がない場合はエラーになります。
特にNULL/NOT NULLの変更や桁数縮小には注意が必要です。
NULL制約を変更する
ALTER TABLE Customers
ALTER COLUMN Email NVARCHAR(100) NOT NULL;
NULLを禁止する場合、すでにNULLデータがあると変更できません。事前にデータを修正しておきましょう。
列を削除する(DROP COLUMN)
不要な列を削除する
列を削除するには DROP COLUMN を使います。
ALTER TABLE Customers
DROP COLUMN Phone;
削除した列のデータは元に戻せないため、バックアップを取ってから実行するのが安全です。
複数列を削除する
ALTER TABLE Customers
DROP COLUMN ZipCode, IsActive;
カンマ区切りで複数列をまとめて削除することもできます。
制約を追加・削除する
制約を追加する(ADD CONSTRAINT)
PRIMARY KEYやFOREIGN KEYなどの制約を後から追加する場合:
ALTER TABLE Orders
ADD CONSTRAINT FK_Orders_Customers
FOREIGN KEY (CustomerID)
REFERENCES Customers(CustomerID);
制約名を明示しておくと、後から削除や確認がしやすくなります。
制約を削除する(DROP CONSTRAINT)
不要な制約を削除するには DROP CONSTRAINT を使います。
ALTER TABLE Orders
DROP CONSTRAINT FK_Orders_Customers;
制約名はシステムビューで確認できます。
SELECT name, type_desc
FROM sys.objects
WHERE type_desc LIKE '%CONSTRAINT%';
実務で注意すべきポイント
- 本番環境でのALTER TABLEは慎重に:ロックが発生し、一時的にアクセスが止まる場合があります。
- 桁数の縮小やNULL制約の追加はリスク:既存データが条件を満たさないとエラーになります。
- 制約や外部キーの削除は依存関係を確認:他テーブルの整合性に影響する可能性があります。
- 大規模変更は一時テーブルを活用:一度新しい構造で作成してデータ移行する方が安全です。
まとめと次のステップ
学んだ内容の整理
- ALTER TABLEは既存テーブルの構造変更に使用。
- ADDで列・制約を追加、ALTERで列変更、DROPで削除。
- データ型や制約変更には互換性と依存関係の確認が必須。
- 安全のためバックアップと検証を行ってから実行する。
参考リンク

0 件のコメント:
コメントを投稿