"防止需要重新创建表的保存更改"负面影响

CF_*_*ger 248 sql-server database-design sql-server-2005 sql-server-2008

前言

我今天在SQL Server 2008中修改了一个列,将数据类型从货币(18,0)更改为(19,2).

我收到错误"您所做的更改需要从SQL Server中删除并重新创建以下表".

在您争相回答之前,请阅读以下内容:

我已经知道工具►选项►设计器►表和数据库设计器中有选项►取消选中 "禁止保存需要重新创建表的更改" . 通过五次单击阻止保存需要重新创建表的更改 ......所以不要回答!

实际问题

我的实际问题是针对其他事情,如下:

这样做有任何负面影响/可能的缺点吗?

当取消选中此框时,表是否会被实际删除并自动重新创建?

如果是这样,表格是否复制了源表的100%完全复制品?

Ant*_*eim 249

工具 - >选项 - >设计器节点 - >取消选中"防止保存需要进行表重新创建的更改".

  • 阅读问题 - 这正是OP所说的不要打扰的内容,因为他已经知道了。 (4认同)
  • 这个问题(从第一个版本开始,我检查了历史记录)要求解释取消选中此框的任何缺点。您甚至还没有尝试解决这个问题。 (3认同)
  • ...但奇怪的是,这个答案获得了最多的选票。我想知道为什么有这么多糟糕的软件。 (2认同)

Aar*_*and 88

只有在SQL Server的Management Studio被编程为知道如何操作的唯一方法的情况下,才会删除并重新创建该表.

当然,有些情况下它会在不需要的情况下执行此操作,但也会出现在Management Studio中进行的编辑不会丢失和重新创建的情况,因为它不需要.

问题在于列举所有案例并确定它们落在哪一行上将是相当繁琐的.

这就是为什么我喜欢ALTER TABLE在查询窗口中使用,而不是隐藏他们正在做的事情的视觉设计师(并且坦率地说有错误) - 我确切地知道会发生什么,并且我可以准备唯一可能的情况是删除并重新创建表(这比SSMS对你这样做的频率要少一些).

  • 虽然这是一个非常好的答案,但我觉得它并没有为OP提出的所有问题提供答案,而这些问题实际上是我感兴趣的问题.特别是_这样做是否有任何负面影响/可能的缺点?_和_如果是,表复制是源表的100%精确副本吗?_.你有关于这些问题的任何信息吗? (5认同)

小智 12

参考 - 关闭此选项可以帮助您避免重新创建表,也可能导致更改丢失.例如,假设您在SQL Server 2008中启用"更改跟踪"功能以跟踪对表的更改.当您执行导致重新创建表的操作时,您会收到"症状"部分中提到的错误消息.但是,如果关闭此选项,则在重新创建表时将删除现有的更改跟踪信息.因此,Microsoft建议您不要通过关闭该选项来解决此问题.


小智 11

只有在以下情况下,SQL Server才会删除并重新创建表:

  • 添加新列
  • 更改列的"允许空值"设置
  • 更改表中的列顺序
  • 更改列数据类型

使用ALTER更安全,因为在重新创建表时元数据丢失的情况下,您的数据将会丢失.

  • 您的清单并非详尽无遗.例如,在列上添加/删除`IDENTITY`属性. (8认同)
  • 将新列添加到字段NULLABLE的末尾不需要重建表。 (2认同)