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


265

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

不允许保存更改。您所做的更改要求删除并重新创建下表。您已经对无法重新创建的表进行了更改,或者启用了“防止保存需要重新创建该表的更改”选项。

什么会使表格不容易编辑?还是SQL Server Management Studio要求重新创建表进行编辑的通常方法?这是什么-这个“防止保存更改的选项”



1
@Pang-这个问题首先出现,这是重复的。
GrandMasterFlush


@Pang-不知道,谢谢。
GrandMasterFlush

Answers:


573

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

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


8
Microsoft支持站点不建议这样做,但是如果表中没有任何数据,则看不到危害。最好使用TSQL进行更改。
乔恩·斯莫克

6
我个人不建议使用设计器处理重要的数据库。我已经看到它在许多场合犯了代价高昂的错误。此外,它可以养成懒惰的开发习惯,并允许人们在无法管理SQL代码路由的情况下修改不够熟练的数据库结构。
Mark W Dickson 2014年

5
同意,Mark,但是在早期开发中,我不需要编写大量脚本。
克里斯托弗

7
令人震惊的是,它是2016年9月,这个令人难以置信的用户不友好的错误(无法选择询问“嘿,您想允许更改表吗?”)仍然在起作用。不,您只需要单击“取消”按钮,就必须重新进行更改。SQL Server最愚蠢。
Mike Gledhill

2
@Mike Gledhill Greetings from 2019,情况仍然如此大声笑
船长

116

工具>选项

在此处输入图片说明

取消选中以上选项


5
感谢您的截图。我一直在寻找类似的东西来帮助我找到那个愚蠢的选择。当对话框提示您无法执行操作时,该对话框应具有一个“仍要执行”复选框。
克里斯·贝纳德

2
最佳实践更改此选项后,请选中上方的选项“自动生成更改脚本”以防止数据丢失
dubi 2014年

感谢您的图片。这非常有用:)
M A.


15

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


2
A)您可以复制SSMS生成的脚本,并在您的生产环境中使用它。B)SSMS通常更容易,更快和更安全,因为SSMS会为您处理所有详细信息。
2014年

2
Itg仍然是一个非常糟糕的主意。您不想在产品上重新创建10,000,000记录表。它不快。如何安全?不良数据就是不良数据,并且如果您使用自己编写的脚本以及让SSMS编写一个脚本,则一致性检查将起作用。在100%的情况下,这是很差的做法。
HLGEM 2014年


14

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

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

乍一看来,阻止此类更改似乎违反直觉-当然,这对于dev服务器是很麻烦的。但是在生产服务器上,此选项及其防止此类更改的默认值可能会节省生命!


2
我现在在开发服务器上,但是在生产服务器上,我肯定会重新打开它。再次感谢您分享经验
rem

1
但是,例如,将nvarchar列的大小从100更改为120是非常简单的操作,可以使用ALTER TABLE轻松完成...然后,为什么SQL Server(Management Studio)删除并为此重新创建表例?
Jaime

4
@Jaime:您需要问问那个视觉设计师的开发者-没有人知道。这只是事实-对于视觉设计师来说,总是可以通过重新创建表格并进行复制来完成许多直接的更改。如果你想用简单的方法,它是给你写一些简单的T-SQL语句和执行他们自己处理。
marc_s 2013年

1
谢谢@marc_s这正是我所期望的答案,尽管我对它们的隐藏原因一无所知,但他们对此没有解释:)
Jaime

1
此限制还防止对象ID在您不知情的情况下发生更改(以防万一您不需要这样做)。
2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.