在 SSMS 設計師中修改資料表結構(如變更欄位順序、新增欄位至中間、變更資料型別、啟用/停用身分識別)後按「儲存」,彈出錯誤:
「無法儲存變更。您所做的變更需要卸除並重新建立下列資料表。您已進行無法在不卸除資料表的情況下重新建立的變更,或已啟用防止儲存需要重新建立資料表之變更的選項。」
SSMS 表格設計師為了保護資料,預設啟用 **「防止儲存需要重新建立資料表的變更」** 選項。當變更涉及中繼資料重組(非單純 ALTER TABLE ADD COLUMN)時,設計師會嘗試:
若表較大或涉及複雜相依性,此操作風險極高,故預設封鎖。
**永遠不要在生產環境使用設計師修改結構。** 撰寫 ALTER TABLE 腳本,納入版控,經 Code Review 後部署。
-- 範例:新增欄位
ALTER TABLE dbo.Orders ADD DiscountRate DECIMAL(5,2) DEFAULT 0;
-- 範例:變更資料型別 (需注意資料相容性)
ALTER TABLE dbo.Orders ALTER COLUMN OrderAmount DECIMAL(19,4);
-- 範例:調整欄位順序 (需重建表,請用腳本)
-- 1. 建立新表 2. INSERT SELECT 3. 切換/重命名
警告:關閉後對大表操作可能導致長時間鎖定、記錄暴增、甚至資料遺失。生產環境**嚴禁**關閉。
| 操作 | 是否需重建 | ALTER TABLE 替代 |
|---|---|---|
| 新增欄位至末尾 | 否 | ALTER TABLE ADD |
| 新增/插入欄位至中間 | 是 | 無直接語法,需重建 |
| 變更資料型別 (相容) | 否 | ALTER TABLE ALTER COLUMN |
| 變更資料型別 (不相容/縮小) | 是 | 需重建或分步驟轉換 |
| 啟用/停用身分識別 | 是 | 需重建 |
| 變更 NULL/NOT NULL | 視情況 | ALTER TABLE ALTER COLUMN |
| 新增/移除預設約束 | 否 | ALTER TABLE ADD/DROP CONSTRAINT |