DB2 修改欄位空值約束使用標準 ALTER TABLE ... ALTER COLUMN 語法,支援雙向切換。本文提供最簡語法與注意事項。
ALTER TABLE Tab1
ALTER COLUMN Col1 SET NOT NULL;
ALTER TABLE Tab1
ALTER COLUMN Col1 DROP NOT NULL;
| 操作 | 前提條件 | 失敗後果 |
|---|---|---|
| SET NOT NULL | 表中現有資料 **無 NULL 值** | SQL0407N: Assignment to NOT NULL column fails |
| DROP NOT NULL | 無特殊前提 | 幾乎不會失敗 |
SELECT COUNT(*) FROM Tab1 WHERE Col1 IS NULL;
UPDATE Tab1 SET Col1 = 'default' WHERE Col1 IS NULL;DELETE FROM Tab1 WHERE Col1 IS NULL;ALTER TABLE Tab1 ALTER COLUMN Col1 SET NOT NULL;
DESCRIBE TABLE Tab1
-- 或
SELECT COLNAME, NULLS FROM SYSCAT.COLUMNS WHERE TABNAME='TAB1';
ALTER COLUMN ... SET DEFAULT 同時加 NOT NULL,需分兩步NOT NULL 會掃描全表驗證,建議維護窗口執行DROP NOT NULL 為中繼資料操作,近乎瞬間完成DEFAULT 約束,SET NOT NULL 後新行插入會自動填入預設值-- Oracle
ALTER TABLE Tab1 MODIFY Col1 NOT NULL;
ALTER TABLE Tab1 MODIFY Col1 NULL;
-- DB2
ALTER TABLE Tab1 ALTER COLUMN Col1 SET NOT NULL;
ALTER TABLE Tab1 ALTER COLUMN Col1 DROP NOT NULL;
掌握雙向語法與前提檢查,即可安全執行欄位空值約束變更。