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

不允许保存更改。所做的更改需要 下面要删除并重新创建的表。你要么做了 对不能重新创建或启用该选项的表的更改 防止保存需要重新创建表的更改。

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


当前回答

在SQL Server Management Studio中的表编辑器中,您可以非常轻松地可视化地进行许多更改,实际上需要SSMS在后台删除表并从头开始重新创建它。即使是像重新排序列这样简单的事情也不能用标准的SQL DDL语句表示——SSMS所能做的就是删除并重新创建表。

这个操作可能是a)在一个大表上非常耗时,或者b)甚至可能因为各种原因(比如FK约束之类的)而失败。因此,SSMS在SQL Server 2008中引入了其他答案已经确定的新选项。

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

其他回答

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

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

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

要解决这个问题,可以使用SQL语句对表的元数据结构进行更改。

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

来源:当您尝试在SQL Server 2008中保存表时,错误消息:“不允许保存更改”

步骤重现问题

In SQL Server Management Studio, create a table that contains a primary key in the Table Designer tool. Right-click the database that contains this table, and then click Properties. In the Database Properties dialog box, click Change Tracking. Set the value of the Change Tracking item to True, and then click OK. Right-click the table, and then click Properties. In the Table Properties dialog box, click Change Tracking. Set the value of the Change Tracking item to True, and then click OK. On the Tools menu, click Options. In the Options dialog box, click Designers. Click to select the Prevent saving changes that require table re-creation check box, and then click OK. In the Table Designer tool, change the Allow Nulls setting on an existing column. Try to save the change to the table.

在SQL Server Management Studio中的表编辑器中,您可以非常轻松地可视化地进行许多更改,实际上需要SSMS在后台删除表并从头开始重新创建它。即使是像重新排序列这样简单的事情也不能用标准的SQL DDL语句表示——SSMS所能做的就是删除并重新创建表。

这个操作可能是a)在一个大表上非常耗时,或者b)甚至可能因为各种原因(比如FK约束之类的)而失败。因此,SSMS在SQL Server 2008中引入了其他答案已经确定的新选项。

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