SQL Server Management Studio - 添加/移动列需要删除并重新创建?

时间:2010-10-09 09:14:35

标签: sql-server sql-server-2005 sql-server-2008 sql-server-express

为什么在添加/移动列时会收到表需要删除并重新创建的消息? 我相信在添加外键约束后会发生这种情况。

如何在不删除表的情况下添加新列?

5 个答案:

答案 0 :(得分:24)

"Prevent saving changes that require table re-creation"

如果您对简单地让SSMS停止唠叨更感兴趣,可以在选项 - >设计师 - >表格和数据库设计器中取消选中“防止保存需要重新创建表格的更改”设置。这些表格仍然会被删除并重新创建,但至少SSMS不会对你有太大的影响。

(这假设你是在开发/测试环境或生产环境中工作,在这种情况下,表格存在的短暂失效不会搞砸任何东西)

答案 1 :(得分:9)

因为SQL Server Management Studio就是这样做的(有时候)!

使用TSQL的ALTER TABLE代替:

ALTER TABLE
    ADD myCol int NOT NULL

答案 2 :(得分:1)

SQL Server(以及任何其他RDBMS,实际上)没有任何“列顺序”的概念 - 例如如果你移动列,实现新表结构的唯一方法是发出一个新的CREATE TABLE语句。你不能以任何其他方式命令你的列 - 你也不应该,因为在关系理论中,元组中列的顺序是无关紧要的。

因此,SQL Server Management Studio可以做的唯一事情(并且一直在做)是:

  • 重命名旧表
  • 在您希望拥有的新布局中创建新表格
  • 从旧表中复制数据
  • 放下旧桌子

解决这个问题的唯一方法是:

  • 不重新排序任何列 - 只在表格末尾添加新列
  • 使用ALTER TABLE SQL语句代替交互式表设计器进行工作

答案 3 :(得分:0)

当您在设计器中编辑表定义时,您说“这就是我希望表格看起来的样子,现在可以找出要发出的SQL语句以实现我的愿望”。这适用于简单的更改,但软件无法读懂您的想法,有时它会尝试以更复杂的方式执行安全操作。

当发生这种情况时,我建议不要单击“确定”,而是单击对话框顶部的“脚本”按钮,然后让它在查询窗口中生成SQL语句。然后,您可以在执行之前编辑和简化生成的代码。

答案 4 :(得分:0)

SSMS 2008 R2(及更早版本)中存在有用的信息:

  • 当表数据发生变化时,SSMS中的ерушк呈现由SSMS在其已打开的选项卡(窗口)中自动刷新 - 应按Ctrl + R进行刷新。强制刷新的选项不会出现在SSMS GUI中 - 通过按钮,菜单或上下文相关选项(右键单击)
  • 当修改(表或数据库)模式时,如添加/删除/删除表中的列,即使通过Ctrl + R,SSMS也不会在已打开的选项卡(窗口)中反映这些更改,应关闭并重新打开标签(窗口)
几年前我通过Microsoft Connect反馈报告了它,但由于它是“按设计”而被关闭了错误

更新:
在20年代开发的桌面产品中看到这一点很奇怪而且很烦人,而这种(自动清新)是由任何浏览器中的大多数Web应用程序完成的