MW211 EXIT

devlog
MSSQL/非NULL列の追加
2015年05月13日
┌──────────────────────────────────────┐
│ALTER TABLE [表] ADD [列] [int] NOT NULL;                                   │
└──────────────────────────────────────┘
「NOT NULL」制約の列を後から追加した場合、エラーとなる。
追加した列の初期値が「NULL」だからだ(矛盾してしまう。

なので、既定値付きなら問題ない。
┌──────────────────────────────────────┐
│ALTER TABLE [表] ADD [列] [int] NOT NULL DEFAULT 0;                         │
└──────────────────────────────────────┘

つまり、最初のやつは以下のような指定だったわけだ(これは矛盾している)。
┌──────────────────────────────────────┐
│ALTER TABLE [表] ADD [列] [int] NOT NULL DEFAULT NULL;                      │
└──────────────────────────────────────┘

でも、こういうことをやりたいケースというのは多々ある。

これを実現するには迂回する形で3ステップ必要となる。
┌──┬───────────────────────────────────┐
│(1) │ALTER TABLE [表] ADD [列] [int] NULL;                                 │
├──┼───────────────────────────────────┤
│(2) │UPDATE [表] SET [列] = 0;                                             │
├──┼───────────────────────────────────┤
│(3) │ALTER TABLE [表] ALTER COLUMN [列] [int] NOT NULL;                    │
└──┴───────────────────────────────────┘
  (1) ひとまずNULL許容属性で追加する
  (2) NULLじゃない値にする
  (3) NOT NULL制約をつける
分類:MSSQL