强制 Management Studio 使用 ALTER TABLE 而不是 DROP/CREATE

问题描述 投票:0回答:5

我想知道是否有办法强制 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
5个回答
9
投票

是的,你可以!

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

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

更新:

Marco,抱歉,我认为没有任何选项可以更改默认行为,至少现在不行。您可能想在 Microsoft Connect 上向 Microsoft 提出增强请求以提出这一建议 - 我认为是个好主意!


5
投票

只是为了补充@marc_s的答案。如果您仍然无法生成更改脚本,因为您的表需要重新创建,您需要转到

Tools -> Options

2
投票
Designers -> Table and Database Designers

下取消标记选项

Prevent saving changes that require table re-creation

enter image description here 很简单,alter 和 drop/create 之间有一个重大区别。 无需深入讨论细节,这可以归结为数据库页面在结构级别上的工作方式。 只要您了解新列很可能最终出现在与表的其余部分不同的页面上,就可以使用 alter 来完成一些更改(添加列)。 其他更改(插入列)必须删除并创建,以便新列可以按正确的顺序放置在正确的页面上。 无论哪种方式,“删除/创建”都是确保您不会在页面级别产生碎片的最佳方法。 这是更改表的最干净、最有效的方法。


0
投票

简单!只需转到

Tool

-1
投票
Option

,然后转到

Designer
节点并选择
Table and Database designer
,这样您就可以取消选中
Prevent saving changes that require ...
复选框。

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

© www.soinside.com 2019 - 2024. All rights reserved.