为啥 SSMS 在添加列时不智能?
Posted
技术标签:
【中文标题】为啥 SSMS 在添加列时不智能?【英文标题】:Why isn't SSMS smart when it comes to adding columns?为什么 SSMS 在添加列时不智能? 【发布时间】:2010-02-22 20:23:02 【问题描述】:每当我想向表中添加一列时,它通常是这样的:
-
启动 SQL Server Management Studio (SSMS)
在要添加列的表上选择“设计”
将新列添加到表中
保存
收到 SSMS 无法保存的错误,因为它需要删除表(它不能保存,因为表上有外键)。
因为我忘记这是 SSMS 无法做到的事情而感到沮丧
手动构造一个alter table命令来添加列
继续生活。
这次我在数字 6 和 7 之间添加了一个步骤。我想我会问为什么 SSMS 不能创建一个简单的 alter table 语句来添加我的新列。
(以防万一,我正在针对 SQL Server 2008 运行 SSMS 2008。)
【问题讨论】:
因为这是我们都必须忍受的垃圾。 (一旦你使用了 pgadmin3,SSMS 就显得很悲伤) 它总是为我生成 CONSTRAINT 下降,也许你有一个选项集可以防止这种情况发生? @KM,他说它产生了下降,但由于外键限制,它不会下降。他(和我)想知道的是为什么它必须删除表来添加一列 只是出于好奇 - 您是在表格末尾添加新列,还是介于两者之间? SQL Server 并没有真正的“列顺序”的概念——所以如果你在表中间插入一个新列,它所能做的就是删除旧表,用你的列顺序重新创建新表想要,然后把数据复制过来。如果对表有 FK 约束,第 1 步将失败...... 这个故事的寓意是:忘记 SSMS 的交互式设计器,改用 T-SQL 语句,不要拘泥于列顺序 - 它与 SQL 完全无关,只与人类相关。 T-SQLALTER TABLE xyz ADD newcolumnname
将(几乎)始终有效 - 问题已解决
【参考方案1】:
或者,您可以转到工具-->选项-->设计器-->表和数据库设计器并取消选中“防止保存需要重新创建表的更改”
问题解决了。
这是来自 MSDN 的解释:http://support.microsoft.com/default.aspx/kb/956176。
当您更改表格时 改变元数据结构 表,然后你保存表, 该表必须基于重新创建 这些变化。
【讨论】:
@Alison: "@KM,他说它产生了丢弃,但由于外键限制它不会丢弃。他(和我)想知道的是为什么它必须丢弃表添加一列” 啊,它被列为“错误”,他们建议使用 T-SQL 来更改表而不是 SSMS.. @Earlz:你有“Bug”列表的链接吗?如果是这样,请将其发布为答案。 @Vaccano,这个答案中的链接说这是一个错误。不好的是它在 2005 年和 2008 年都受到了影响,而微软似乎仍然没有修复它的打算。以上是关于为啥 SSMS 在添加列时不智能?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Django 在添加新列时会删除 SQL DEFAULT 约束?