這陣子經常在台中教書,每次換到不同班的學生就會遇到一次這個問題,因為從 SQL Server 2008 開始 Management Studio 管理工具預設會防止儲存需要資料表重建的變更(Prevent saving changes that require table re-creation),意思是說,當你在修改資料庫表格結構時,當修正的幅度過大,例如移除欄位、變更欄位順序、變更欄位型態、變更欄位長度、變更是否允許 NULL等狀況,預設都會拒絕你變更資料表結構,導致按下儲存按鈕之後並沒有真正的變更資料結構(Schema),這個預設設定對剛踏入 IT 屆小白兔來說實在有點挫折,不過這點安全控制也保護了資料庫遺失資料的風險。
首先,我們先來看一下 Management Studio 裡面設計資料表的畫面,假設我們如下圖的 Email 原本是不允許 Null 的欄位,但我們變更為允許 Null,這時按下 Ctrl+S 儲存本次變更:
在完全沒有修改過 Management Studio 選項設定的情況下,預設會出現以下儲存警告訊息,雖然寫的都是中文字,但我發現許多人其實從來不看錯誤訊息,看到任何對話方塊第一件事是先尋找【確認】、【取消】、【是】或【否】等按鈕,然後以為已經設定成功。這是非常不好的習慣,建議還是養成習慣查看錯誤訊息,如果看不懂,也要拿這些錯誤訊息上網查詢關鍵字,通常都會順利找到答案。
解決此問題的方法就是去變更 SQL Server Management Studio (SSMS) 的選項設定,步驟如下:
1. 開啟「工具」→「選項」
2. 切換到「設計師」類別,將「防止儲存需要資料表重建的變更」的核取項目取消勾選即可,並按下確定按鈕即可。
設定完成後,我們直接回到表格設計畫面,按下 Ctrl + S 儲存資料表變更,能夠正確儲存的畫面如下,你至少需要看到【是】這個按鈕,並按下【是】按鈕,這才能真正儲存本次資料表結構變更。
相關連結