SQL Server不允许保存更改 您所做的更改要求删除并重新创建以下表
2024-04-08
409 0在 SQL Server management Studio 中使用设计器对表进行更改后尝试保存时,可能会收到以下错误消息:
不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。
对表进行下列一项或多项更改时,会出现此问题:
- 更改列的“允许 Null”设置。
- 重新排序表中的列。
- 更改列数据类型。
- 添加新列。
- 更改filegroup表或其text/image数据。
报错原因
出现此问题的原因是:默认情况下,SQL Server Management Studio 中启用了阻止保存需要重新创建表的更改的选项。
更改表以便更改表的元数据结构,然后保存表时,必须根据这些更改重新创建表。 这可能会导致元数据丢失,并在重新创建表期间直接丢失数据。 如果在 SQL Server Management Studio (SSMS) 选项窗口的设计器部分启用了阻止保存需要重新创建表的更改的选项,则会收到“症状”部分中提到的错误消息。
解决方法
1. 使用SQL语句更新表结构
请使用 ALTER TABLETransact-SQL 语句对表的元数据结构进行更改。
例如,若要在名为 MyTable 的表中更改日期时间类型的 MyDate 列以接受空值,可以使用:
alter table MyTable alter column MyDate7 datetime NULL
2. 更改阻止保存需要重新创建表的更改的选项
若要更改阻止保存需要重新创建表的更改的选项 ,请执行以下操作:
- 打开 SQL Server Management Studio。
- 在“工具”菜单上,单击“选项”。
- 在选项窗口的导航窗格中,单击设计器。
- 选中或取消选中阻止保存需要重新创建表的更改复选框,然后单击确定。
微软官网的建议:
如果禁用此选项,则在保存表时不会收到所做更改已更改表的元数据结构的警告。 在这种情况下,保存表时可能会发生数据丢失。
建议不要通过关闭“阻止保存需要重新创建表的更改”的选项来解决此问题。 虽然关闭此选项有助于避免重新创建表,但也可能导致更改丢失。 例如,假设在 SQL Server 中启用“更改跟踪”功能来跟踪对表所做的更改。 执行导致重新创建表的操作时,会收到症状部分中提到的错误消息。 但是,如果关闭此选项,则在重新创建表时会删除现有的更改跟踪信息。 因此,建议不要通过关闭此选项来解决此问题。
若要确定是否为表启用了“更改跟踪”功能,请执行以下操作:
- 在 SQL Server Management Studio 中,在“对象资源管理器”中找到表。
- 右键单击表,然后单击“属性”。
- 在“表属性”对话框中,单击“更改跟踪”。 如果“更改跟踪”项的值为“真”,则表已启用了此选项。 如果值为“假”,则表示已禁用此选项。
启用该Change Tracking功能后,使用 Transact-SQL 语句更改表的元数据结构。