本文可帮助您解决在尝试将表保存在 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”设置。
尝试将更改保存到表中。