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

mar*_*rco 12 sql-server ddl ssms

我想知道是否有办法迫使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 
Run Code Online (Sandbox Code Playgroud)

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

有什么选择我可以改变以改变这种行为吗?或者,这可能是有可能的,在使用上面的简单ALTER TABLE时是否存在一些危险?

谢谢.

mar*_*c_s 8

是的你可以!

在SQL Server Management Studio中,进入相关表的表设计模式,并进行更改.但是:你点击"保存"按钮,但在表的设计视图,而不是单击鼠标右键,应该有上下文菜单的最后一个"生成更改脚本"项目.

替代文字http://i40.tinypic.com/33e7ite.png

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

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


Mar*_*rtW 5

您无法更改行为,只是它创建的默认脚本并不总是最有效.它以一种它知道可行的格式创建脚本,尽管结果通常很慢并且资源很多.我建议您习惯为自己创建所有更改的脚本,因为您可以更好地优化它.您创建的内容没有任何问题(假设您在MyCol2上没有现有的约束/依赖关系,因为它变为可以为空的int而无效)