テーブルに列(以降カラム)を任意の場所に追加したい場合、
MySQLのようにAfter句が使えないため一時テーブルを使う。
-- トランザクション開始
begin transaction;
-- 一時テーブルに回避
SELECT * INTO #temp FROM [対象テーブル名]
-- 対象テーブルを削除
DROP TABLE [対象テーブル名]
-- カラムを追加した対象テーブルを再作成
CREATE TABLE [対象テーブル名]
(
...
);
-- インデックスもあれば忘れずに
CREATE NONCLUSTERED INDEX [インデックス名] ON [対象テーブル名]
(
...
);
-- IDENTITY型を使っていれば
SET IDENTITY_INSERT [対象テーブル名] ON;
-- 一時テーブルから復帰
INSERT INTO [対象テーブル名]
(
... -- IDENTITY型を使ってる場合は列必須
)
SELECT
...
FROM #temp;
-- IDENTITY型を使っていれば
SET IDENTITY_INSERT [対象テーブル名] OFF;
-- 一時テーブルを削除
DROP TABLE #temp;
エラーが出なければ
-- コミット
COMMIT;
エラーが出た場合
-- ロールバック
ROLLBACK;