在 SSMS 表設計師中修改結構 (如新增外來鍵、變更資料類型、重排欄位) 時,點選儲存出現:
不允許儲存變更。您所做的變更需要卸除並重新建立下列資料表...
SSMS 預設啟用 「防止儲存需要重建資料表的變更」 選項。當變更涉及:
SSMS 會嘗試建立新表 → 複製資料 → 刪除舊表 → 重命名,為防誤操作預設封鎖。
| 風險 | 說明 |
|---|---|
| 資料截斷 | 縮減欄位長度 (如 VARCHAR(100)→VARCHAR(50)) 會無訊息截斷 |
| 資料遺失 | 轉換失敗 (如 VARCHAR→INT 含非數字) 導致整批失敗 |
| 長時間鎖表 | 大表重建需 Sch-M 鎖,封鎖所有存取 |
| 身分識別/時間戳重設 | 重建表會重置 IDENTITY、ROWVERSION |
| 權限/觸發器/擴充屬性遺失 | 視 SSMS 版本行為可能不同 |
SWITCH 分區、線上重建 (企業版)、維護時段
5. 設計師僅供開發/測試環境快速原型
-- 新增欄位 (末尾,通常不重建)
ALTER TABLE dbo.MyTable ADD NewCol VARCHAR(50) NULL;
-- 變更資料類型 (需確認資料相容)
ALTER TABLE dbo.MyTable ALTER COLUMN ExistingCol VARCHAR(100) NOT NULL;
-- 新增外來鍵 (WITH NOCHECK 避免驗證既有資料)
ALTER TABLE dbo.ChildTable
ADD CONSTRAINT FK_Child_Parent
FOREIGN KEY (ParentID) REFERENCES dbo.ParentTable(ID)
WITH NOCHECK; -- 後續可用 CHECK CONSTRAINT 啟用