共用方式為


SSMS 中不允許儲存變更的錯誤訊息

本文可協助您解決當您嘗試將資料表儲存在 SQL Server Management Studio (SSMS) 時收到錯誤訊息的問題。

原始產品版本:SQL Server
原始 KB 編號: 956176

徵兆

當您在使用 SQL Server management Studio 中的設計工具對資料表進行變更之後嘗試儲存資料表時,可能會收到下列錯誤訊息:

不允許儲存變更。 您所做的變更需要捨棄並重新建立下列資料表。 您已變更無法重新建立的資料表,或啟用防止儲存需要重新建立資料表的變更選項。

當您對資料表進行下列之一或多項變更時,就會發生此問題:

  • 您可以變更資料列的[允許 Null] 設定。
  • 您會重新排序資料表中的資料欄位。
  • 您可以變更資料欄位的資料類型。
  • 您可以新增資料欄位。
  • 您可以變更 filegroup 資料表或其 text/image 資料。

原因

之所以發生此問題,是因為預設會在 SQL Server Management Studio 中啟用防止儲存需要重新建立 資料表的變更選項。

當您變更資料表以改變資料表的中繼資料結構,然後儲存資料表時,必須根據這些變更重新建立資料表。 這可能會導致中繼資料遺失,並在重新建立資料表時直接遺失資料。 如果您在 SQL Server Management Studio (SSMS) 選項視窗的 [設計工具] 區段中啟用 [防止儲存需要重新建立數據表的變更] 選項,您會收到 [徵兆] 區段中提及的錯誤訊息。

因應措施

若要解決此問題,請使用 ALTER TABLE Transact-SQL 語句來變更資料表的中繼資料結構。

例如,若要在數據表中變更名為 MyTable 之 datetime 類型的 MyDate 數據行,以接受您可以使用的 NULL 值:

alter table MyTable alter column MyDate7 datetime NULL

重要

強烈建議您不要關閉防止儲存需要重新建立資料表的變更選項來解決此問題。 如需關閉此選項風險的詳細資訊,請參閱 '詳細資訊'章節。

其他相關資訊

若要變更 防止儲存需要重新建立資料表的變更 選項,請依照下列步驟:

  1. 開啟 [SQL Server Management Studio] 。

  2. [工具] 功能表上,按一下 [選項]

  3. 選項 視窗的流覽窗格中,按一下 設計工具

  4. 選取或清除 防止儲存需要資料表重新建立的變更 核取方塊,然後按一下 確定

注意

如果您停用此選項,當您儲存資料表時,系統不會警告您您所做的變更已變更資料表的中繼資料結構。 在此情況下,當您儲存資料表時,可能會發生資料遺失。

關閉"防止儲存需要重新建立資料表的變更"選項的風險

雖然關閉此選項可協助您避免重新建立資料表,但也可能導致變更遺失。 例如,假設您在 SQL Server 中啟用變更追蹤功能來追蹤資料表的變更。 當您執行導致重新建立資料表的作業時,您會收到 徵狀 區段中提及的錯誤訊息。 不過,如果您關閉此選項,則會在重新建立資料表時刪除現有的變更追蹤資訊。 因此,建議您不要關閉選項來解決此問題。

若要判斷是否已針對資料表啟用變更追蹤功能,請依照下列步驟:

  1. 在 SQL Server Management Studio 中,找出物件總管中的資料表。
  2. 用滑鼠右鍵按一下資料表,然後按一下屬性。
  3. 在資料表屬性對話方塊中,按一下變更追蹤。 如果變更追蹤項目的值為 True,則會針對資料表啟用此選項。 如果值為 False,則會停用此選項。

Change Tracking啟用此功能時,請使用 Transact-SQL 語句來變更資料表的中繼資料結構。

重現問題的步驟

  1. 在 SQL Server Management Studio 中,在資料表設計工具中建立包含主索引鍵的資料表。
  2. 以滑鼠右鍵按一下本資料表存放的資料庫,然後按一下 [屬性]
  3. [資料庫屬性] 對話方塊中,按一下 [變更追蹤]
  4. 變更追蹤 項目的值設定為 True,然後按一下 [確定]
  5. 用滑鼠右鍵按一下資料表,然後按一下 [屬性]
  6. [資料表屬性] 對話方塊中,按一下 [變更追蹤]
  7. 變更追蹤 項目的值設定為 True,然後按一下 [確定]
  8. [工具] 功能表上,按一下 [選項]
  9. [選項] 對話方塊中,按一下 [設計工具]
  10. 按一下以選取 [防止儲存需要重新建立資料表的變更] 核取方塊,然後按一下 [確定]
  11. 在資料表設計工具中,變更現有資料行上的 [允許 Null] 設定。
  12. 嘗試將此變更儲存到資料表。