在Visual Studio中,假設您已經擁有SQL 2008數據庫項目,並向表中添加了不可爲空的列。當您現在部署數據庫時,如果該表中有數據,則應該失敗。 (對嗎?)如何編寫自定義邏輯,以便在更新期間可以將此列設置爲「x」或使用更高級的查詢或光標來更新整個表並填寫新列?這是您只想要發生一次的事情 - 同時列已添加到數據庫中。有沒有這方面的支持?Visual Studio 2010 SQL Server 2008數據庫項目 - 自定義更新
回答
這是我最終做的。
- 將版本信息添加到數據庫(例如在SystemSettings表中)。
- 爲下一個版本創建一個腳本(例如1.1.0.0.sql)。
- 腳本中的\部署後\ Script.PostDeployment.sql文件,添加以下內容:
DECLARE @versionMajor INT;
DECLARE @versionMinor INT;
DECLARE @versionBuild INT;
DECLARE @versionRevision INT;
SELECT TOP 1
@versionMajor = VersionMajor,
@versionMinor = VersionMinor,
@versionBuild = VersionBuild,
@versionRevision = VersionRevision
FROM SystemSettings;
IF(@versionMajor < = 1 AND @versionMinor < 1)
BEGIN
:R 「.. \升級\ 1.1.0.0.sql」
END
這將運行1.1。如果數據庫版本較低,則爲0.0腳本。1.1.0.0腳本將數據庫版本號更新爲最後一步。未來的更新只需要添加另一個IF塊。
update mytable
set newcolumn = 'x'
where newcolumn is null;
是的 - 但請閱讀我的問題。我正在討論將這種類型的腳本集成到SQL數據庫項目部署中。 – 2010-11-03 02:06:42
@Josh M:爲什麼downvote?您沒有指定部署哪個工具,除了「SQL數據庫項目部署」外,還有很多部署方式。 – 2010-11-03 02:10:30
好的 - 標題清楚地說明了我正在使用的工具。 – 2010-11-03 03:24:42
我會添加一個可爲空的列,運行UPDATE命令來填充它,並將列更改爲NOT NULL。儘管我使用Visual Studio 2010,但我不使用它來部署。相反,我使用SQL Compare進行部署 - 它會生成一個SQL腳本,它很容易調整。
謝謝。這就是我現在所做的,但我不禁想到必須有一種更自動化的方式來做到這一點。 – 2010-11-03 03:26:28
我對this type of topic做了大量的研究,可惜它似乎是VSDB項目缺乏的領域。開始尋找的好地方是Visual Studio ALM Rangers guide VSDB項目;他們有一個動手實驗室詳細介紹了他們推薦的最佳實踐,以完成你所要求的事情(包括使用部署前和部署後的腳本從臨時表複製數據)。此外,Barclay Hill的博客有關於您的問題的article(他是Data Tools的高級項目經理),與本指南相同。
此推薦的方法在我看來,作爲具有非常高的維護成本,如果你必須要能夠更新多個不同版本的目標數據庫的,但如果你只有一個數據庫(或模式的一個版本)更新,這是相當可行的。
謝謝,我會看看。 – 2010-11-03 03:27:41
下面是我如何做到這一點。
在架構瀏覽器中打開表創建腳本,並添加像這樣的新欄目:
[first_name] varchar(32) NOT NULL default ' ',
[last_name] varchar(32) NOT NULL default ' ',
因爲他們有一個* 默認值*他們可以成功部署。
然後在我的安裝後腳本中檢查表中的值,並運行更新以填充它們,如果是的話。或者代碼可以修復它。
- 1. 數據庫項目:Visual Studio 2008 vs 2010
- 2. SQL Server 2005 Visual Studio 2010數據庫項目intellisense
- 3. 爲Visual Studio 2010數據庫項目自定義部署腳本
- 4. Visual Studio'SQL Server 2008服務器項目'與'Sql Server 2008數據庫項目'?
- 5. Visual Studio 2010數據庫項目無法識別SQL 2008地理數據類型
- 6. Visual Studio數據庫項目和SQL Azure
- 7. Visual Studio 2010數據庫項目部署
- 8. 新Visual Studio 2010數據庫項目和數據庫圖
- 9. Visual Studio 2010數據庫項目!
- 10. visual-studio-2008專業數據庫項目
- 11. Visual Studio 2010宏從數據庫項目中刪除SQL文件
- 12. Visual Studio 2010 SQL Server數據庫項目 - 忽略存儲過程和函數
- 13. Visual Studio 2008 web express:創建新的SQL Server數據庫
- 14. 通過visual studio 2010訪問sql 2008數據庫C#
- 15. 在Visual Studio 2010數據庫項目中生成種子數據
- 16. 在Visual Studio 2008中打開Visual Studio 2010項目
- 17. 的Visual Studio 2010和SQL Server
- 18. 在Visual Studio 2008中使用sql server 2005數據庫項目的最佳實踐
- 19. 將Visual Studio 2008項目轉換爲2010
- 20. Windows 7 Home Premium上的Visual Studio 2008/2010和SQL Server 2008
- 21. 如何在安裝時使用SQL Server 2008數據庫項目
- 22. 從數據庫項目Visual Studio 2010創建一個SQL用戶
- 23. Visual Studio中的SQL數據庫項目
- 24. 部署數據庫項目到SQL Server 2008 Express的
- 25. Visual Studio 2010的數據庫項目:參考外部數據庫
- 26. Visual Studio 2010數據庫項目和代碼生成
- 27. 使用VB 2010更新SQL Server Express 2008中的數據
- 28. 從Visual Studio 2010中有選擇地更新SQL Server數據庫架構
- 29. 從Visual Studio 2010中的Visual Studio 2008項目編輯源代碼
- 30. 如何將Visual Studio 2010數據庫項目轉換爲SSDT項目
請小心此解決方案。假設你的1.1.0.0.sql查詢TableX。如果在更高版本中放棄TableX,則必須更新該腳本。隨着版本數量的增加,在這種情況下您將擁有越來越多的腳本來維護。 – jelbourn 2010-11-04 13:31:16
升級腳本按順序運行,除非我誤解您的評論,否則這不應該成爲問題。 – 2011-03-02 23:41:19