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

Ara*_*ash 713 ssms save menuitem sql-server-2008

当我在SQL Server中创建一个表并保存它时,如果我尝试编辑表设计,比如将列类型从int更改为real,我会收到以下错误:

不允许保存更改.您所做的更改需要删除并重新创建下表.您已对无法重新创建或启用的表进行了更改,该选项会阻止保存需要重新创建表的更改.

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

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

Rob*_*vey 1390

MSDN上的保存(不允许)对话框:

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

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

  • 将新列添加到表的中间
  • 删除列
  • 改变列的可空性
  • 更改列的顺序
  • 更改列<<<<的数据类型

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

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

  • 此选项告诉SSMS它可以继续在新模式中创建临时表,将数据复制到此模式中,然后删除旧表并将Temp表重命名为原始名称.所有这些都应该在交易中完成,但是关系将被打破并重新创建,因此如果不是100%那么可以做出意想不到的事情. (37认同)
  • 不知道为什么我不记得下拉这个选项的简单步骤,我一直在寻找解决方案.Hehehehehe.谢啦! (12认同)
  • 神圣的牛 - 你可以关掉它以通过这个错误?我不知道这一点,过去3年一直担心无意中设计没有身份规范的表并且不得不创建一个新表.棒极了! (7认同)
  • SSMS不应该在没有先警告你的情况下让你做一些不安全的事情.但是为了以防万一,手头有备份. (6认同)
  • 以下是Microsoft的CAVEAT关于禁用"防止保存更改..."选项:https://support.microsoft.com/en-us/kb/956176.基本上,如果这是您使用的功能,您可能会丢失变更跟踪等元数据. (4认同)
  • 您应该为所有经验丰富的用户添加一个建议,以便在完成所需的更改后立即重新设置此选项。这会造成很大的伤害。 (2认同)

ype*_*eᵀᴹ 197

你使用SSMS吗?

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

  • 这并不愚蠢,因为你失去任何重要东西的风险很小。上面的 ypercube 是错误的,你不会丢失任何数据。它确实会删除旧表并为您创建一个新表,但它会确保保留所有数据。唯一的问题可能是,如果您以这种方式编辑包含数亿行的非常大的表,可能需要一两个小时才能保存更改 (6认同)
  • @NeilMeyer要注意在那里检查复选框是有原因的.这是一种安全措施,可以防止操作丢失并重新创建表格(从而丢失**所有数据**!所以,请谨慎使用! (2认同)

Kni*_*ins 72

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

五次快速点击

通过五次单击阻止保存需要重新创建表的更改

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

保存后,重复该过程以重新勾选该框.这可以防止意外数据丢失.

进一步说明

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

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

*由于您的桌子是空的,您的具体情况不会造成后果.我完全提供这个解释,以提高您对程序的理解.

  • 这是错误的。当您编辑这样的表并且其中有数据时,数据不会丢失。将创建新表,其中包含原始表中的所有数据。 (4认同)

Tab*_*man 25

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

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

在"选项"窗口的导航窗格中,单击"设计器".

选中或清除"禁止保存需要重新创建表的更改"复选框,然后单击"确定".

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

在此输入图像描述


Riz*_*ill 22

这是非常容易和简单的设置问题,可以通过以下步骤在5秒内修复

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

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

  • 这怎么会以任何方式增加接受的答案? (8认同)

小智 17

转到位于顶部菜单的工具.从下拉列表中
选择选项.您现在有一个弹出窗口,选择位于菜单左侧块的设计器选项.取消选中" 禁止保存需要重新创建表的更改 "选项.单击"确定"按钮.


ped*_*ram 12

取消选中工具►选项►设计器选项卡中的Prevent saving changes that require table re-creation复选框.

SQL Server 2012示例:

在此输入图像描述


Irs*_*ada 9

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

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

在此处输入图片说明


小智 6

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

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

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

更改表MyTable更改列MyDate7 datetime NULL“

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

Gel*_*Ann 6

以防有人在这里也没注意(像我一样):

对于Microsoft SQL Server 2012,在选项对话框中,有一个偷偷摸摸的小复选框,表示隐藏所有其他设置.虽然我得说我一直错过那个小怪物!

在那之后,你可以继续执行步骤,设计师,取消选中阻止保存等等等等......

sneaky_check_box_in_option


小智 5

工具>>选项>>设计器,然后取消选中“防止需要重新创建表的保存更改”:

照片格式说明