SQL Server“不允许保存更改”错误►防止保存需要重新创建表的更改


748

当我在SQL Server中创建表并将其保存时,如果尝试编辑表设计,例如将列类型从int更改为real,则会出现此错误:

不允许保存更改。您所做的更改要求删除并重新创建下表。您已经对无法重新创建的表进行了更改,或者启用了选项以防止保存需要重新创建表的更改。

为什么必须重新创建表?我只想将数据类型从更改smallintreal

该表是空的,直到现在我才使用它。


Answers:


1464

MSDN上的“保存(不允许)”对话框中

保存(不允许)”对话框警告您不允许保存更改,因为您所做的更改要求删除并重新创建列出的表。

以下操作可能需要重新创建表:

  • 在表格中间添加新列
  • 删除列
  • 更改列为空
  • 更改列的顺序
  • 更改列的数据类型 <<<<

若要更改此选项,请在“ 工具”菜单上,单击“ 选项”,展开“ 设计器”,然后单击“ 表和数据库设计器”。选择或清除阻止保存需要重新创建表的更改复选框。

另请参见Colt Kwong博客条目:
SQL 2008 Management Studio中不允许保存更改


6
SSMS不应在没有事先警告的情况下让您做一些不安全的事情。但是,为了以防万一,请准备好备份。
罗伯特·哈维

39
此选项告诉SSMS,可以继续在新模式中创建临时表,将数据复制到该表中,然后删除旧表并将临时表重命名为原始名称。在事务中应该做的一切都很好,但是关系将被破坏并重新创建,因此如果不是100%,则可能会发生意外情况。
贾斯汀·金

13
不知道为什么我不记得那些简单的步骤来删除此选项,而我总是必须寻找解决方案。呵呵呵呵呵。谢啦!
开发人员

8
神圣的牛-您可以将其关闭以克服此错误?我不知道这一点,并且在过去的3年中一直担心会在无意间设计没有身份规范的表并不得不创建新表。大提示!
nocarrier

4
这是Microsoft的CAVEAT,用于禁用“防止保存更改...”选项:support.microsoft.com/en-us/kb/956176。基本上,如果您使用的是功能,则可能会丢失诸如变更跟踪之类的元数据。
鲍达德2015年

204

您使用SSMS吗?

如果是,请转到菜单工具>>选项>>设计器,然后取消选中“防止保存需要重新创建表的更改”


工具>>选项等。不是“菜单”(仅从ssms 2014的角度来看,我认为与旧版本相同)
汤姆·斯蒂克

@TomStickel我想我的意思去菜单“工具”
ypercubeᵀᴹ

:P是的,我想,我只是想对任何实际上会被“卡住”的人发表评论,我知道,但我想有些人可能会很快举起他们的双手……thx
汤姆·斯蒂克

2
@NeilMeyer当心该复选框在此处被选中是有原因的。这是一项安全措施,可防止操作会丢失并重新创建表(从而丢失其所有数据!因此,请谨慎使用!)
ypercubeᵀᴹ18

如果像这样重新创建表,表之间的关系会丢失吗?
尼尔·迈尔

78

防止保存需要重新创建表的更改

五次快速点击

防止保存需要五次单击即可重新创建表的更改

  1. 工具类
  2. 选件
  3. 设计者
  4. 防止保存需要重新创建表的更改
  5. OK

保存后,重复此步骤以重新选中该框。这可以防止意外数据丢失。

进一步说明

  • 默认情况下,SQL Server Management Studio禁止删除表,因为删除表时,其数据内容会丢失。*

  • 在表设计视图中更改列的数据类型时,在保存更改时,数据库会在内部删除表,然后重新创建一个新表。

*由于表为空,因此您的特定情况不会造成任何后果。我完全提供此解释以提高您对过程的理解。


27

若要更改防止保存需要表重新创建的更改选项,请按照下列步骤操作:

打开SQL Server Management Studio(SSMS)。在工具菜单上,单击选项。

在“选项”窗口的导航窗格中,单击“设计器”。

选中或清除“阻止保存需要重新创建表的更改”复选框,然后单击“确定”。

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

在此处输入图片说明


表设计器很方便,但您无法用它实现所有功能
Sitecore Sam '18

22

这是一个非常简单的设置问题,可以按照以下步骤在5秒钟内解决

要允许您在更改表后保存更改,请按照以下步骤进行sql设置:

  1. 打开Microsoft SQL Server Management Studio 2008
  2. 单击工具菜单选项,然后单击选项
  3. 选择设计师
  4. 取消选中“防止保存需要重新创建表的更改”选项
  5. 点击确定
  6. 尝试改变你的桌子
  7. 您的更改将按需执行

8
如何以任何方式将其添加到接受的答案中?
不朽之蓝

17

转到位于顶部菜单的工具。从下拉菜单中
选择选项。您现在有一个弹出窗口,选择位于菜单左侧区域的Designers选项。取消选中选项防止保存需要重新创建表的更改。单击确定按钮。


12

Prevent saving changes that require table re-creation工具}选项}设计器选项卡中取消选中该框。

SQL Server 2012示例:

在此处输入图片说明


12

这可以在Microsoft SQL Server中轻松更改。

  1. 打开Microsoft SQL Server Management Studio 2008
  2. 点击工具菜单
  3. 点击选项
  4. 选择设计师
  5. 取消选中“防止保存需要重新创建表的更改”
  6. 点击确定

在此处输入图片说明


7

从此链接复制 “ ...重要提示我们强烈建议您不要通过关闭“防止保存需要重新创建表的更改”选项来解决此问题。有关关闭此选项的风险的更多信息,请参阅“更多信息”一节。

“ ...要变通解决此问题,请使用Transact-SQL语句对表的元数据结构进行更改。有关其他信息,请参见以下主题。 SQL Server联机丛书中

例如,要更改名为MyTable的表中datetime类型的MyDate列以接受NULL值,可以使用:

更改表MyTable更改列MyDate7 datetime NULL“


2
有这么多答案都在说同一件事,这就是我一直在寻找的答案,因为我的表中有实时数据,所以我不想丢失。我需要将一个十进制列从0个小数位更新为2个小数位,并且简单的alter语句非常有效!
stitz

这里的悲剧是SSMS应该在
后台

6

并且以防万一这里的某人也没有关注(例如我):

对于Microsoft SQL Server 2012,在选项对话框中,有一个偷偷摸摸的小复选框,它会显然隐藏所有其他设置。尽管我不得不说我一直都想念那个小怪物!!!

在那之后,您可以继续执行设计器步骤,取消选中以防止保存等等……

偷偷摸摸的检查框



2

1)打开顶部的工具。
2)从选择列表中选择选项。
3)现在出现弹出窗口,您现在可以从左侧菜单列表中选择设计器选项。
4)现在防止保存更改,需要取消选中需要重新创建的表。 现在单击确定。


1

在“工具”菜单上,单击“选项”,从侧面菜单中选择“设计器”,然后取消选中可导致重新创建表的更改。然后保存更改


0

如果在这样的列表中看不到“防止保存需要重新创建表的更改” 图像为

您需要启用变更跟踪。

  • 右键单击数据库,然后单击属性
  • 点击更改跟踪并启用它
  • 再次转到工具->选项->设计器,然后取消选中它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.