SQLServerでは既存テーブルへのカラム追加は、ALTER TABLE ADD構文で行う。例えば、ユーザーテーブル(TBL_USER)に年齢カラム(Age)を追加する場合は以下。
1 |
ALTER TABLE TBL_USER ADD Age int DEFAULT 0 |
このとき、カラムは末尾に追加される。
では、末尾ではなく任意の位置にカラムを追加したい場合は・・・
SQLServerでは構文が用意されてない。
MySQLとかだとAFTER~とかで指定カラムの後ろに追加できたから、SQLServerも同じように出来ると思ったのに…。そんなわけなので、SQLServerの場合は少し大袈裟なことをして任意の位置へのカラム追加を実現する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* ユーザーテーブルに年齢カラムが存在しない場合のみ処理 */ if ((select COLUMNPROPERTY(OBJECT_ID(TBL_USER), Age, PRECISION)) is null) BEGIN -- ①ユーザーテーブルのデータをテンポラリテーブルに退避 SELECT * INTO #Temp FROM TBL_USER -- ②ユーザーテーブルを削除 DROP TABLE TBL_USER -- ③年齢カラムを追加してユーザーテーブルを再作成 CREATE TABLE TBL_USER ( UserNo int NOT NULL DEFAULT (0), Name nvarchar(20) NOT NULL DEFAULT (), Age int NOT NULL DEFAULT (0), Addr nvarchar(50) NOT NULL DEFAULT (), Tel nvarchar(15) NOT NULL DEFAULT (), CONSTRAINT TBL_USER_PK PRIMARY KEY CLUSTERED ( UserNo ) ) -- ④テンポラリテーブルから退避データを復元 INSERT INTO TBL_USER SELECT Tmp.UserNo, Tmp.Name, 0, Tmp.Addr, Tmp.Tel FROM #Temp Tmp -- ⑤テンポラリテーブルを削除 DROP TABLE #Temp END |
ひとつひとつ追って見れば大したことはしてなくて、データ退避⇒テーブル作り直し⇒データ復元です。ただ単にカラムを好きな場所に追加するだけでここまでやらないといけないとは…。