在SQL Server Management Studio中编辑表后保存更改

rem*_*rem 252 sql sql-server ssms database-table

如果我想保存表中的任何更改,以前保存在SQL Server Management Studio中(表中没有数据),我收到一条错误消息:

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

什么可以防止表格被轻易编辑?或者,这是SQL Server Management Studio要求重新创建表进行编辑的常用方法吗?它是什么 - 这个"选项防止保存更改"

Ped*_*dro 546

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

发生这种情况是因为有时需要删除并重新创建表以便更改某些内容.这可能需要一段时间,因为必须将所有数据复制到临时表,然后重新插入新表中.由于SQL Server默认不信任你,你需要说"好的,我知道我在做什么,现在让我做我的工作."

  • Microsoft支持站点不鼓励这样做,但如果表中没有任何数据,我看不到这种危害.可能最好使用TSQL进行更改. (8认同)
  • 我个人不鼓励将设计师用于重要的数据库.我已经看到它在很多场合犯了代价高昂的错误.此外,它还促进了懒惰的开发习惯,并允许人们修改数据库结构,如果他们无法管理SQL代码路由,那么他们可能不够熟练. (6认同)
  • 令人震惊的是,它是2016年9月,这个令人难以置信的用户不友好的错误(没有选择问"嘿,你想允许表更改吗?")仍在使用中.不,你只是得到一个取消按钮,并且必须重新进行更改.SQL Server是最愚蠢的. (6认同)
  • 同意,马克,但在早期开发中,我不需要编写一堆脚本. (5认同)
  • @Mike Gledhill 2019 年的问候,现在仍然如此,哈哈 (3认同)

Pra*_*nna 111

工具>选项

在此输入图像描述

取消选中上面的选项

  • 谢谢截图.我正在寻找这样的东西来帮助我找到那个愚蠢的选择.该对话框应该有一个"无论如何都要做"的复选框,当它说你不能. (4认同)
  • 最佳实践更改此选项后,请检查上方选项"自动生成更改脚本"以防止数据丢失 (2认同)

Dan*_*llo 72

要解决此问题,请使用SQL语句对表的元数据结构进行更改.

启用"防止保存需要重新创建表的更改"选项时会发生此问题.

源:当您尝试在SQL Server 2008中保存表时出现错误消息:"不允许保存更改"

  • 我的问题是:为什么SQL Server不使用所需的T-SQL语句而不是为每一次更改删除并重新创建表?我无法理解这种行为. (12认同)

HLG*_*GEM 15

您应该停止以这种方式停止编辑数据,而不是取消选中该框(一个糟糕的解决方案).如果必须更改数据,则使用脚本执行此操作,以便您可以轻松地将其移植到生产环境中,以便它受源代码管理.这也使得在将生产推迟到dev之后更容易刷新测试更改,以使开发人员能够对抗更新的数据.

  • A)您可以复制SSMS生成的脚本并在生产环境中使用它.B)SSMS通常更容易,更快速,更安全,因为SSMS会为您处理所有细节. (2认同)
  • Itg仍然是一个非常糟糕的主意.您不希望在prod上重新创建10,000,000记录表.它并不快.它怎么更安全?糟糕的数据是错误的数据,如果您使用您编写的脚本以及让SSMS写一个脚本,则一致性检查会起作用.在100%的案例中,它是不良实践. (2认同)

mar*_*c_s 14

您可以在SQL Server Management Studio的表编辑器中轻松,直观地进行许多更改,实际上需要SSMS将表放在后台并从头开始重新创建.甚至像重新排序列这样的简单事情也无法在标准SQL DDL语句中表达 - 所有SSMS都能做到的就是删除并重新创建表.

此操作可能是a)在大型表上非常耗时,或者b)甚至可能由于各种原因(例如FK约束和内容)而失败.因此,SQL Server 2008中的SSMS引入了其他答案已经确定的新选项.

一开始可能看起来反直觉是为了防止这种变化 - 这对开发服务器来说肯定是一种麻烦.但是在生产服务器上,此选项及其防止此类更改的默认值将成为一种潜在的救命!

  • @Jaime:你需要问那个视觉设计师的开发者 - 没有人知道.这只是一个事实 - 对于视觉设计师来说,许多直接的改变总是通过重新创建表格并进行复制来完成.如果你想使用直截了当的方法,那么你可以通过编写一些简单的T-SQL语句并执行它们来自己处理它. (4认同)
  • 我现在在开发服务器上,但在生产服务器上,我肯定会把它打开.再次感谢您分享经验 (2认同)
  • 但是,例如,将 nvarchar 列的大小从 100 更改为 120 是非常简单的操作,可以使用 ALTER TABLE 轻松完成...那么,为什么 SQL Server (Management Studio) 会删除并重新创建此类表案例? (2认同)

小智 6

这是关闭此选项的风险.如果您启用了更改跟踪(表格),则可能会丢失更改.

克里斯

http://chrisbarba.wordpress.com/2009/04/15/sql-server-2008-cant-save-changes-to-tables/