我想知道是否有办法迫使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时是否有一些危险?
感谢。
答案 0 :(得分:8)
是的,你可以!
在SQL Server Management Studio中,进入相关表的表设计模式,然后进行更改。但是:不单击“保存”按钮,而是右键单击表设计视图,在上下文菜单的末尾应该有一个“生成更改脚本”项。
alt text http://i40.tinypic.com/33e7ite.png
单击该菜单项,您将看到一个弹出对话框,其中包含您对设计器中的表所做的更改所需的T-SQL脚本。复制或保存该T-SQL代码,并从设计器中取消,瞧 - 您有更改脚本!
更新:Marco,对不起,我认为没有任何选项可以更改默认行为,至少现在不行。您可能希望在Microsoft Connect上向Microsoft提交增强请求以提出建议 - 好主意,我想!
答案 1 :(得分:5)
您无法更改行为,只是它创建的默认脚本并不总是最有效。它以知道将起作用的格式创建脚本,尽管结果通常很慢并且资源很多。我建议您习惯为自己创建所有更改的脚本,因为您可以更好地优化它。您创建的内容没有任何问题(假设您在MyCol2上没有现有的约束/依赖关系,因为它变为可以为空的int而无效)
答案 2 :(得分:0)
只是增加@marc_s的答案。如果仍然无法生成更改脚本,因为需要重新创建表,则需要转到Tools -> Options
,并在Designers -> Table and Database Designers
下取消标记选项Prevent saving changes that require table re-creation
。
答案 3 :(得分:-1)
容易!只需转到Tool
- > Option
,然后转到Designer
节点,然后选择Table and Database designer
,以便取消选中Prevent saving changes that require ...
复选框。
现在你可以对你的桌子设计进行任何变形! p>