本文可帮助您解决在尝试将表保存在 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 的表中更改日期时间类型的 MyDate 列以接受空值,您可以使用:

    alter table MyTable alter column MyDate7 datetime NULL
    

    强烈建议不要通过关闭“阻止保存需要重新创建表的更改”的选项来解决此问题。 要了解关闭此选项相关风险的详细信息,请参阅“详细信息”部分。

    若要更改阻止保存需要重新创建表的更改的选项 ,请执行以下操作:

  • 打开 SQL Server Management Studio。

  • 在“工具”菜单上,单击“选项”

  • 选项窗口的导航窗格中,单击设计器

  • 选中或取消选中阻止保存需要重新创建表的更改复选框,然后单击确定

    如果禁用此选项,则在保存表时不会收到所做更改已更改表的元数据结构的警告。 在这种情况下,保存表时可能会发生数据丢失。

    关闭“阻止保存需要重新创建表的更改”选项的风险

    虽然关闭此选项有助于避免重新创建表,但也可能导致更改丢失。 例如,假设在 SQL Server 中启用“更改跟踪”功能来跟踪对表所做的更改。 执行导致重新创建表的操作时,会收到症状部分中提到的错误消息。 但是,如果关闭此选项,则在重新创建表时会删除现有的更改跟踪信息。 因此,建议不要通过关闭此选项来解决此问题。

    若要确定是否为表启用了“更改跟踪”功能,请执行以下操作:

  • 在 SQL Server Management Studio 中,在“对象资源管理器”中找到表。
  • 右键单击表,然后单击“属性”。
  • 在“表属性”对话框中,单击“更改跟踪”。 如果“更改跟踪”项的值为“真”,则表已启用了此选项。 如果值为“假”,则表示已禁用此选项。
  • 启用该Change Tracking功能后,使用 Transact-SQL 语句更改表的元数据结构。

    重现问题的步骤

  • 在 SQL Server Management Studio 中,在“表设计器”工具中创建包含主键的表。
  • 右键单击包含此表的数据库,然后单击“属性”
  • 在“数据库属性”对话框中,单击“更改跟踪”
  • 将“更改跟踪”项的值设置为“True”,然后单击“确定”
  • 右键单击此表,然后单击“属性”
  • 在“表属性”对话框中,单击“更改跟踪”
  • 将“更改跟踪”项的值设置为“True”,然后单击“确定”
  • 在“工具”菜单上,单击“选项”
  • 在“选项”对话框中,单击“设计器”
  • 单击以选中“防止保存需要重新创建表的更改”复选框,然后单击“确定”。
  • 在“表设计器”工具中,更改现有列上的“允许为 Null”设置。
  • 尝试将更改保存到表中。
  •