2012-07-27 60 views
3

我开始使用数据库项目并在简单的任务中挣扎。如果我想添加一个新列,它是NOT NULL,如果表中已经有数据,我该如何使它工作?如何添加NOT NULL列?

我以前写差异的脚本,在这样我会写类似的情况:

-- ... ADD COLUMN X ... 
-- insert data into x 
-- ... ALTER COLUMN X NOT NULL 

我怎么会需要处理这样的情况下与数据库项目?

THX任何的窍门 sl3dg3

回答

3

我终于找到了两种可能的方法。简而言之:

  • 使用默认的约束(由雨的建议)
  • 在部署后脚本填写的数据,删除默认约束
  • 部署后,删除默认约束从源头

或者

  • 备份在部署前脚本表的数据到临时表,DELE从目标表
  • 在部署后脚本TE的数据,将数据备份到目标表,其中包括新NOT NULL的新数据 - 列,删除表

这里找到:http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/49bf2a88-d80d-4a9f-970e-728bd530332e/

或者在这里:http://blogs.msdn.com/b/bahill/archive/2009/03/30/managing-data-motion-during-your-deployments-part-1.aspx

两者意味着额外的工作,我希望从这种常见情况的框架更多的支持。但至少可以这样做。

+0

如果目标表被其他许多表引用,该怎么办?删除数据将头痛!因为您必须先迁移所有相关表数据,或者在从第一个表中删除数据之前取消其他表的外键约束。 – 2013-02-23 09:10:15

1

您可以通过在创建列提供了一些默认值添加NOT NULL列。

+0

你的意思是默认约束?然后用它做什么,在第二步中删除它?我一般不会使用默认值,因为我认为它们是邪恶的。编写适当的默认值由应用程序决定。 – sl3dg3 2012-07-27 08:02:31

2

您也可以从发布数据库对话框中,而不是为该列指定DEFAULT值;进入高级 - >高级部署选项并选中“生成智能默认值”框。

来自VS中的描述: 生成智能默认值:当更新包含不允许空值的列的数据的表时,自动提供默认值。