我想知道是否有办法强制 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 是否存在我没有看到的危险?
谢谢。
只是为了补充@marc_s的答案。如果您仍然无法生成更改脚本,因为您的表需要重新创建,您需要转到
Tools -> Options
Designers -> Table and Database Designers
下取消标记选项
Prevent saving changes that require table re-creation
。很简单,alter 和 drop/create 之间有一个重大区别。 无需深入讨论细节,这可以归结为数据库页面在结构级别上的工作方式。 只要您了解新列很可能最终出现在与表的其余部分不同的页面上,就可以使用 alter 来完成一些更改(添加列)。 其他更改(插入列)必须删除并创建,以便新列可以按正确的顺序放置在正确的页面上。 无论哪种方式,“删除/创建”都是确保您不会在页面级别产生碎片的最佳方法。 这是更改表的最干净、最有效的方法。
简单!只需转到
Tool
Option
,然后转到
Designer
节点并选择 Table and Database designer
,这样您就可以取消选中 Prevent saving changes that require ...
复选框。现在您可以对桌子设计进行任何更改!