2012-07-27 28 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中的描述: 生成智能默認值:當更新包含不允許空值的列的數據的表時,自動提供默認值。