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

Posted

技术标签:

【中文标题】在 SQL Server Management Studio 中编辑表后保存更改【英文标题】:Saving changes after table edit in SQL Server Management Studio 【发布时间】:2010-12-30 10:59:57 【问题描述】:

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

不允许保存更改。您所做的更改需要 以下表将被删除并重新创建。你要么做了 无法重新创建或启用该选项的表的更改 防止保存需要重新创建表的更改。

什么会阻止表格被轻松编辑?或者,SQL Server Management Studio 是否需要重新创建表进行编辑?这是什么 - 这个“选项阻止保存更改”

【问题讨论】:

关闭此选项存在风险。如果您启用了更改跟踪(您的表格),您可能会丢失更改。 Saving changes is not permitted in SQL Server 的可能重复项 @Pang - 这个问题最先出现,这是重复的。 @GrandMasterFlush meta.***.com/a/252930/1402846 | meta.stackexchange.com/a/147651/204869 @Pang - 我不知道,谢谢。 【参考方案1】:

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

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

【讨论】:

Microsoft 支持站点不鼓励这样做,但如果表中没有任何数据,我看不出有什么害处。可能最好使用 TSQL 进行更改。 我个人不鼓励将设计器用于重要数据库。我已经看到它多次犯下代价高昂的错误。此外,它还助长了懒惰的开发习惯,允许在无法管理 SQL 代码路径的情况下修改数据库结构。 同意,马克,但在早期开发中,我不需要编写一堆脚本。 令人震惊的是,现在是 2016 年 9 月,而且这个令人难以置信的用户不友好错误(没有选项问“嘿,你想允许表更改吗?”)仍在发挥作用。不,您只是得到一个取消按钮,并且必须重新进行更改。 SQL Server 是最愚蠢的。 @Mike Gledhill 2019 年的问候,现在仍然如此,哈哈【参考方案2】:

工具 |选项 |设计师 |表和数据库设计器

取消选中“防止保存需要重新创建表的更改”选项。

【讨论】:

感谢截图。我一直在寻找这样的东西来帮助我找到那个愚蠢的选择。当它说你不能时,对话框应该有一个“无论如何都要做”的复选框。 最佳实践 更改此选项后,选中上方选项“自动生成更改脚本”以防止数据丢失 感谢您的图片。这非常有用:)【参考方案3】:

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

当启用“防止保存需要重新创建表的更改”选项时会出现此问题。

来源:Error message when you try to save a table in SQL Server 2008: "Saving changes is not permitted"

【讨论】:

我的问题是:为什么 SQL Server 不使用所需的 T-SQL 语句,而不是为每次更改删除并重新创建表?我无法理解这种行为。【参考方案4】:

您应该停止以这种方式编辑数据,而不是取消选中该框(一个糟糕的解决方案)。如果必须更改数据,请使用脚本进行更改,以便您可以轻松地将其移植到生产环境并使其处于源代码控制之下。这也使得在生产下推到开发后更容易刷新测试更改,以使开发人员能够处理更新的数据。

【讨论】:

A) 您可以复制 SSMS 生成的脚本并在您的生产环境中使用它。 B) SSMS 通常更容易、更快、更安全,因为 SSMS 会为您处理所有细节。 Itg 仍然是一个非常糟糕的主意。您不想在 prod 上重新创建 10,000, 000 条记录表。它并不快。它如何更安全?坏数据就是坏数据,如果您使用自己编写的脚本以及让 SSMS 编写脚本,一致性检查就会起作用。在 100% 的情况下,这是糟糕的做法。 我想说,在任何你已经处于 prod 并且其中有数据的环境中,那么是的,这可能是真的。另一方面,在我所处的情况下,我仍在开发中,并且有一个我想修改的完全空白的表......我会这么说。 :p【参考方案5】:

转到 SSMS 并尝试一下

菜单>>工具>>选项>>设计器>>取消选中“防止保存需要重新创建表的更改”。

这里有一个很好的解释: http://blog.sqlauthority.com/2009/05/18/sql-server-fix-management-studio-error-saving-changes-in-not-permitted-the-changes-you-have-made-require-the-following-tables-to-be-dropped-and-re-created-you-have-either-made-changes-to-a-tab/

【讨论】:

【参考方案6】:

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

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

一开始,阻止此类更改可能看起来违反直觉——而且这对开发服务器来说肯定是个麻烦事。但是在生产服务器上,此选项及其阻止此类更改的默认值成为潜在的救星!

【讨论】:

我现在在开发服务器上,但在生产服务器上,我肯定会重新打开它。再次感谢分享经验 但是,例如,将 nvarchar 列的大小从 100 更改为 120 是非常简单的操作,可以使用 ALTER TABLE 轻松完成......那么,为什么 SQL Server (Management Studio) 会下降并为这种情况重新创建表格? @Jaime:您需要询问该视觉设计师的开发人员 - 没有其他人知道。这只是一个事实——对于视觉设计师,许多直接的更改总是通过重新创建表格和复制来完成。如果您想使用直接的方法,则由您自己通过编写一些简单的 T-SQL 语句并执行它们来自己处理。 谢谢@marc_s 这正是我所期待的答案,尽管我不相信他们有一个可以解释这一切的隐藏原因:) 此限制还可以防止对象 ID 在您不知情的情况下更改(以防您不希望发生这种情况)。

以上是关于在 SQL Server Management Studio 中编辑表后保存更改的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server Management Studio 中注册 SQL Server 服务器?

SQL Server Management Studio (SSMS,SQL Server管理工具) 一直在加载程序包解决方案

如何使用 Windows 和 SQL 身份验证使用 SQL Server Management Studio 连接到 SQL Server

使用 SQL Server Management Studio 连接到 SQL Server

如何使用 SQL Server Management Studio (2008) 在 SQL Server Compact Edition 中创建列

在 SQL Server Management Studio 中更改 SQL Server 数据库中的列属性