SQLのALTER TABLE でテーブル名や列名などを変更する

SQLにはテーブル定義の変更を行うための命令として「ALTER TABLE」文が用意されています。
ALTER TABLEを使うと、既に作成されているテーブルの名前や、テーブル内の列の名前、列のデータ型、サイズ、初期値、制約など、様々な変更を自由に設定することができます。

そこで今回は、ALTER TABLE文によるテーブル定義の変更を行う命令のうち、基本的な命令として、テーブル名の変更とテーブル内の列名の変更を行う方法(SQL文の記述)について紹介します。

ALTER TABLE文の構文

ALTER TABLE文では、「ALTER TABLE」と記述した後に、定義を変更するテーブルの名前を記述します。

テーブル名を記述した後には「何」を「どう」変えるのかを指定します。

本記事では、テーブル名と列名を変更しますので、テーブル名の後には、テーブルまたは列の名前を変更する命令を記述します。

テーブル名、列名の変更

テーブル名や列名を変更するときは「RENAME」キーワードを使って、変更後の新しい名前を指定します。

テーブル名の変更

RENAMEキーワードを使用してテーブルの名前を変更するALTER TABLE文の構文は次のようになります。

「ALTER TABLE テーブル名」を記述した後に、RENAMEキーワードを使用して新しいテーブルの名前を指定します。
RENAMEの後の「TO」「AS」は省略可能ですが、SQLの可読性を考慮してつけても良いと思います。個人的には「TO」がわかりやすくて良いと思います。(データベース製品によって、構文に違いがありますので、詳細については該当のデータベース製品のマニュアル等でご確認ください。)

以下にテーブルの名前を変更する場合のSQL文の例を示します。
ここでは「OLD_TABLE」という名前のテーブルを「NEW_TABLE」という名前に変更します。

テーブルの列名の変更

RENAMEキーワードを使用してテーブルの列の名前を変更するALTER TABLE文の構文は次のようになります。

列名の変更では「RENAME」キーワードの後に「COLUMN」キーワードを記述します。
「COLUMN」キーワードの後に、名前を変更する列の名前と、変更後の新しい名前を指定します。

以下に列の名前を変更する場合のSQL文の例を示します。
ここではテーブル名の変更で使用した「NEW_TABLE」テーブルの「OLD_COLUMN」という名前の列を「NEW_COLUMN」という名前に変更します。

テーブルの名前と列の名前の変更について記述してきましたが、テーブルや列以外のオブジェクトに対しても、RENAMEキーワードを使用することができます。
ここでは参考としてインデックスを変更する場合の構文を示しておきます。

SQLServerでのオブジェクト名の変更 sp_rename

SQLServerでは、テーブルなどのデータベースのオブジェクトの名前を変更するために、専用の命令(ストアドプロシージャ)が用意されています。
ですので、T-SQLでテーブル名を変更する場合は、それを使うことができます。
オブジェクト名を変更するための命令には「sp_rename」ストアドプロシージャを使用します。

sp_renameには、第1引数に「名前を変更するオブジェクトの名前」、第2引数に「変更後のオブジェクトの名前」を指定します。

変更前の名前にはテーブルであれば、「スキーマ名.現在のテーブル名」列であれば「スキーマ名.テーブル名.現在の列名」を指定します。

以下にsp_renameを使ってテーブル名を変更するサンプルのSQLを記載します。

テーブル名の変更

ここでは、既にデータベースに存在する「ABC_Table」という名前のテーブルを「XYZ_Table」という名前に変更します。

列名の変更

sp_renameではテーブル名の他に列名を変更することもできます。
ここでは、「ABC_Table」テーブルの「Column1」列の名前を「Column2」に変更します。

sp_renameはストアドプロシージャなので、EXEC文を使って実行します。

SQLServerでは、ALTER TABLE ~ RENAME ~ が使用できないようなので、ご注意ください。