【问题标题】:Forcing Management Studio to use ALTER TABLE instead of DROP/CREATE强制 Management Studio 使用 ALTER TABLE 而不是 DROP/CREATE
【发布时间】:2011-01-26 18:38:23
【问题描述】:

我想知道是否有办法强制 MSSQL Management Studio 生成这样的脚本:

ALTER TABLE Mytable
ADD MyCol bit NOT NULL
CONSTRAINT MyColDefault
DEFAULT 0 WITH VALUES


ALTER TABLE [dbo].Mytable
ALTER COLUMN MyCol2 int NULL

GO 

当我更改表中列的一个非常简单的属性时。 如果我在设计器中执行此操作并要求生成的脚本,该脚本不会执行如此简单的任务,而是复制 tmp 表中的所有数据,删除原始表,用原始表名重命名 tmp 表。而且,当然,删除并重新创建每个约束和关系。

我可以更改任何选项来更改此行为吗?或者,这可能是可能的,使用上面的简单 ALTER TABLE 是否有一些我没有看到的危险?

谢谢。

【问题讨论】:

  • 有没有办法做到这一点?

标签: sql-server ddl ssms


【解决方案1】:

您无法更改行为,只是它创建的默认脚本并不总是最有效的。它以它知道可以工作的格式创建脚本,尽管结果通常会很慢且资源繁重。我建议您习惯自己为所有更改创建脚本,因为您可以更好地优化它。您创建的内容没有任何问题(前提是您在 MyCol2 上没有现有的约束/依赖项,这些约束/依赖项会因它成为可为空的 int 而失效)

【讨论】:

    【解决方案2】:

    是的,你可以!

    在 SQL Server Management Studio 中,进入相关表的表设计模式,然后进行更改。但是:不要单击“保存”按钮,而是在表格设计视图中右键单击,上下文菜单的末尾应该有一个“生成更改脚本”项。 p>

    单击该菜单项,您将看到一个弹出对话框,其中包含对设计器中的表进行的更改所需的 T-SQL 脚本。复制或保存该 T-SQL 代码,然后取消设计器,瞧——你有你的更改脚本!

    更新: Marco,抱歉,我认为没有任何选项可以更改默认行为,至少现在没有。您可能希望在 Microsoft Connect 上向 Microsoft 提交增强请求以提出该建议 - 好主意,我认为!

    【讨论】:

    • 嗨,马克,很抱歉,也许我没有说清楚。我知道这一点,这就是我知道 SQLMS 以这种方式做事的方式。我想知道是否有任何方法可以修改其默认行为。您的建议对以后使用该脚本很有用,这确实是我想要做的。太糟糕了,在我看来,这里生成的脚本很麻烦,而且在通常情况下资源效率不高。再见!
    【解决方案3】:

    简单!只需转到Tool->Option,然后转到Designer 节点并选择Table and Database designer,这样您就可以取消选中Prevent saving changes that require ... 复选框。

    现在您可以对您的桌子设计进行任何更改!

    【讨论】:

    • 这将给您一个错误,而不是保存您的更改 - 它不会让设计者用户 ALTER TABLE。
    【解决方案4】:

    只是为了补充@marc_s 的答案。如果您仍然无法生成更改脚本,因为您的表需要重新创建,您需要转到Tools -> Options 并在Designers -> Table and Database Designers 下取消标记选项Prevent saving changes that require table re-creation

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 2012-08-26
      • 2010-12-04
      • 1970-01-01
      • 2018-04-24
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多