2012-05-12 26 views
2

我們有一個SQL Server實例,它包含15-20個數據庫,我們在RedFS的幫助下在TFS中進行檢查。我正在研究一個腳本,以便能夠複製實例(例如,開發人員可以在需要時運行本地實例),並藉助這些腳本。我擔心的是這些腳本之間的依賴關係。從RedGate簽入腳本中重新創建數據庫

在TFS,展鵬創造了這些文件夾與.sql文件爲每個數據庫:

Functions 
Security 
Stored Procedures 
Tables 
Triggers 
Types 
Views 

我做了一個快速測試PowerShell的,只是遍歷這些文件夾執行的SQL,但我認爲這可能不是總是工作。有我可以遵循的嚴格的順序嗎?還是有一些簡單的方法來做到這一點?爲了澄清,我希望能夠從一個完全空白的SQL Server實例開始,並根據TFS中的內容(沒有數據,但沒關係)完成一個完全配置的實例。使用Powershell不是必需的,所以如果以其他方式更簡單,那是最好的選擇。

+0

不知道它是否適合您的情況,但僅僅包含它,Web Deploy(又名'msdeploy')框架還包括對發佈數據庫的支持。 –

+0

這裏是一個相關的SO線程:http://stackoverflow.com/questions/3471580/how-to-package-publish-sql-databases-with-asp-net-mvc-2-website –

回答

4

如果您已經在使用RedGate,他們會提供大量關於如何將更改從源代碼管理移動到數據庫的文章。這裏有一個它描述的TFS使用sqcompare命令行移動數據庫代碼:

http://www.codeproject.com/Articles/168595/Continuous-Integration-for-Database-Development

如果你比較任何空數據庫會造成你正在尋找的腳本。

+0

空的比較似乎它會工作。我可以編寫一個PS腳本來創建數據庫,並使用sqlcompare填充它們。謝謝! – carlpett

0

如果您使用帶有數據庫選項的Visual Studio,它包含一個Schema Compare,它將允許您比較TFS中的數據庫項目與本地實例的內容。它將爲您創建一個腳本,讓這些對象在本地實例中創建。我還沒有嘗試完成這個完整的實例。

您可能最多隻能在本地實例中創建數據庫,然後讓Visual Studio查看錶和其他對象不存在。

您也可以對每個數據庫進行最後一次備份,並讓開發人員將它們還原到本地實例。但是,根據安全策略以及數據庫中的數據類型,這可能因每個環境而異。

我傾向於使用PowerShell爲我構建腳本。當我重新運行本地實例上的腳本時,我可以更好地控制腳本編寫的內容,我可以按照需要執行的順序執行腳本。可能需要更多時間,但是我可以使用更好的功能腳本來工作與,PS是我的首選。在SQL社區中已經編寫了一些很好的腳本,可以幫助你解決這個問題。 Jen McCown做了她丈夫寫的所有帖子的博客文章,right here

1

從腳本文件夾部署數據庫的唯一可靠方法是使用Red Gate SQL Compare。如果使用PowerShell運行.sql文件,則可能無法以正確的順序創建對象。即使你按照有意義的順序(函數,然後表,然後視圖...)運行它們,仍然可能存在依賴性問題。

SQL Compare讀取所有腳本,並使用它們在內存中構建「虛擬」數據庫,然後爲其計算一個依賴關係矩陣,因此創建部署腳本時,事務按正確的順序完成。這將防止SQL Server引發依賴關係相關的錯誤。