强制使用 ALTER TABLE 而非 DROP/CREATE:管理工具

12

我想知道是否有一种方法可以强制MSSQL管理工作室生成这样的脚本:

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 是否存在我没有看到的某些危险?
谢谢。

马可,你有找到一种方法来解决这个问题吗? - AnotherDeveloper
4个回答

9

可以!

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

alt text

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

更新: Marco,抱歉,我认为目前没有更改默认行为的选项。您可能需要在Microsoft Connect上提交增强请求以提出建议-我认为这是个好主意!


1
嗨,马克,或许我没有表达清楚。我知道这一点,这也是我知道SQLMS以那种方式处理事情的方式。 我想知道是否有任何方法可以修改其默认行为。您建议的对于稍后使用脚本很有用,确实这就是我想做的。可惜在通常情况下,这里生成的脚本笨重且不够高效,这是我的个人意见。 再见! - marco

5

您无法更改行为,只是默认脚本创建的格式并不总是最有效的。它会创建一些它知道可以工作的脚本,但通常结果会很慢,占用资源较多。我建议您逐渐习惯自己创建所有更改的脚本,因为这样可以更好地优化它。如果没有现有的约束/依赖于MyCol2,使其成为可空int将无任何问题。


2

补充一下@marc_s的回答。如果你仍然无法生成更改脚本,因为你的表需要重新创建,那么你需要进入工具 -> 选项,在设计师 -> 表和数据库设计师下取消勾选选项防止保存需要重新创建表的更改

enter image description here


那就是秘密配方!谢谢! - undefined

-1

很简单!只需前往工具->选项,然后选择设计师节点并选择表格和数据库设计师,以便您可以取消选中防止需要保存更改的更改...复选框。

现在您可以对表格设计进行任何更改!


3
这会导致错误而不是保存您的更改 - 它不会让设计人员使用ALTER TABLE。 - Keith Walton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接