標題: [技術文章] SQL防止儲存需要資料表重建的變更
無頭像
s6351301

註冊 2013-3-2
用戶註冊天數 4044
狀態 離線
發表於 2017-8-7 14:10 
59.120.175.116
分享  私人訊息  頂部


Sql server 2008相對於2005有些奇怪的預設規定
常會讓人摸不著頭緒
比如說我已經是系統管理者了,但為啥改個table的欄位也不行,目前發現一個狀況,我要改table的欄位
但會彈出下列視窗

第一次看到還真是令我傻眼,怎麼會這樣!,一開始還以為是database的設定有什麼地方要調,結果都不是
後來在google一陣後,找到解決方法
居然是在ssms的工具->選項中

在designers中要把”防止儲存需要資料表重建的變更”的勾選取消,這樣就可以了

後來發現,原來如果這個選項是勾選的,且你的table中有資料的話,就會彈出
如果這個選項是勾選的,但你的table中是沒有任何資料的話,就可以修改..
以上資料提供給跟我遇到情況一樣的人
http://yangxinde.pixnet.net/blog ... D%E5%BB%BA%E7%9A%84這陣子經常在台中教書,每次換到不同班的學生就會遇到一次這個問題,因為從 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 儲存資料表變更,能夠正確儲存的畫面如下,你至少需要看到【是】這個按鈕,並按下【是】按鈕,這才能真正儲存本次資料表結構變更。

相關連結

https://blog.miniasp.com/post/2012/10/26/SQL-Server-Management-Studio-Prevent-saving-changes-that-require-table-re-creation.aspx