觸發情境
在 SSMS 物件總管設計師中變更資料表結構 (如:插入欄位、變更資料型別、調整 NULL 屬性、新增/移除身分識別欄位) 時,若變更需要 **捨棄並重建資料表**,預設會彈出錯誤:
不允許儲存變更。您所做的變更需要捨棄並重新建立下列資料表。您已變更無法重新建立的資料表,或已啟用「阻止儲存需要重新建立資料表的變更」選項。
解除限制步驟 (SSMS 2008/2012/2014/2016/2017/2019/Azure Data Studio)
- 工具列 → 工具 (Tools) → 選項 (Options)。
- 左側樹狀 → 設計工具 (Designers) → 資料表設計工具和資料庫設計工具 (Table and Database Designers)。
- 取消勾選 防止儲存需要重新建立資料表的變更 (Prevent saving changes that require table re-creation)。
- 按 確定 套用。
哪些變更會觸發重建?
- 插入/刪除/重新排序欄位 (非尾端新增)。
- 變更資料型別 (需資料轉換)、精度、定序。
- 變更 NULL/NOT NULL (含資料時)。
- 新增/移除 IDENTITY、ROWGUIDCOL、FILESTREAM 屬性。
- 變更檔案群組/分區配置。
風險與最佳實務
| 風險 | 說明 | 建議 |
| 資料遺失 | 重建過程中若中斷 (斷電、強制結束),資料可能損毀。 | **生產環境嚴禁** 使用設計師變更結構;改用 T-SQL ALTER TABLE 並包裹交易。 |
| 鎖定封鎖 | 重建需 Sch-M 鎖定,封鎖所有存取。 | 維護窗口執行,評估資料量預估時間。 |
| 身分識別值重置 | 重建可能導致 IDENTITY 種子重置。 | T-SQL 明確控制 IDENTITY_INSERT / DBCC CHECKIDENT。 |
| 權限/擴充屬性遺失 | 設計師重建可能不保留細微屬性。 | T-SQL 完整腳本保留所有屬性。 |
建議工作流
- 開發/測試環境:可暫時開啟設計師便利性。
- 產出 ALTER TABLE 腳本 (SSMS 右鍵資料表 → 產生指令碼 → 建立/變更)。
- 代碼審查 → 變更管理流程 → 生產環境以腳本部署 (或用 DACPAC/Flyway/Liquibase)。
- 生產環境 SSMS **保持勾選防止重建**,避免誤操作。
結語
「阻止儲存需要重新建立資料表的變更」是保護生產資料的安全閥。**請在開發環境暫時關閉、生產環境永久啟用**,並養成以 T-SQL 腳本管控結構變更的習慣。