6

我开始使用数据库项目并努力完成简单的任务。如果我想添加一个新列,NOT NULL如果表中已有数据,我该如何使其工作?

我曾经写过差异脚本,在这种情况下,我会写如下内容:

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

我需要如何使用数据库项目处理这种情况?

感谢任何提示 sl3dg3

4

3 回答 3

5

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

  • 使用默认约束(根据 Rain 的建议)
  • 在部署后脚本中填入数据,去掉default-constraint
  • 部署后,从源中删除默认约束

或者

  • 将预部署脚本中的表数据备份到临时表中,从目标表中删除数据
  • 在部署后脚本中,将数据移回目标表,包括新 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

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

于 2012-07-27T14:35:39.270 回答
4

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

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

于 2014-12-11T12:37:51.247 回答
0

您可以通过在创建列时提供一些默认值来添加非空列。

于 2012-07-27T07:39:37.550 回答