Sql 为什么SSMS在添加列时不聪明?

Sql 为什么SSMS在添加列时不聪明?,sql,sql-server,ssms,sql-server-2008,Sql,Sql Server,Ssms,Sql Server 2008,每当我想向表中添加一列时,通常是这样: 启动SQL Server Management Studio SSMS 在要将列添加到的表上选择“设计” 将新列添加到表中 拯救 获取SSMS无法保存的错误,因为它需要删除表,而无法保存,因为表上有外键。 我忘了这是SSMS不能做的事情,这让我很沮丧 手动构造ALTERTABLE命令以添加列 继续生活。 这次我在数字6和7之间添加了一个步骤。我想我会问为什么SSMS不能用一个简单的ALTERTABLE语句来添加我的新列 如果有必要,我将针对SQL Serv

每当我想向表中添加一列时,通常是这样:

启动SQL Server Management Studio SSMS 在要将列添加到的表上选择“设计” 将新列添加到表中 拯救 获取SSMS无法保存的错误,因为它需要删除表,而无法保存,因为表上有外键。 我忘了这是SSMS不能做的事情,这让我很沮丧 手动构造ALTERTABLE命令以添加列 继续生活。 这次我在数字6和7之间添加了一个步骤。我想我会问为什么SSMS不能用一个简单的ALTERTABLE语句来添加我的新列


如果有必要,我将针对SQL Server 2008运行SSMS 2008。

或者,您可以转到“工具”->“选项”->“设计器”->“表和数据库设计器”,然后取消选中“防止保存需要重新创建表的更改”

问题解决了

以下是MSDN的解释:

当你换了一张桌子 更改的元数据结构 表,然后保存该表, 必须根据重新创建表 这些变化


因为这是我们都必须忍受的垃圾。一旦你使用了pgadmin3,SSMS似乎总是为我生成约束删除,也许你有一个选项集可以防止这种情况?@KM,他说它生成了删除,但由于外键约束,它不会删除。他和我想知道的是,出于好奇,为什么必须删除表来添加列—您是在表的末尾添加新列,还是在这两者之间的某个位置添加新列?SQLServer实际上没有列顺序的概念,因此,如果在表的中间插入一个新列,它所能做的就是删除旧表,用所需的列顺序重新创建新表,然后复制数据。如果表上有FK约束,第1步将失败……所以故事的寓意是:忘记SSMS的交互式设计器,改用T-SQL语句,不要拘泥于列顺序——它与SQL完全无关,只与人类相关。T-SQL ALTER TABLE xyz ADD newcolumnname几乎总是有效的—这是一个问题solved@Alison:@KM,他说它产生了下降,但由于外键限制,它不会下降。他和我想知道的是,为什么它必须删除表来添加列啊,它被列为一个bug,他们建议使用T-SQL来更改表,而不是SSM。@Earlz:你有bug列表的链接吗?如果是这样,就把它作为一个答案发布。@Vaccano,这个答案中的链接说这是一个bug。糟糕的是,它已经影响了2005年和2008年,而微软似乎仍然没有修复它的意图。