2013-07-29 46 views

回答

0

這是一個艱難的。根據您的自動化方式,您可以使用其他程序的組合。例如,如果您有某種CI系統,則可以使用SQL Compare自動將源控件中的文件與實時數據庫進行比較,並告訴它同步。您需要源控制系統的命令行界面來檢查更改。

SQL源代碼管理作爲軟件的一部分,被設計爲僅以交互方式工作。

如果你想在代碼(c#,VB)中做到這一點,那麼你可以利用源代碼管理系統的API來檢查文件是否有。例如,SVN有「SharpSVN」,還有一個用於TFS的API。

+0

謝謝。我們會研究這一點,如果我仍然有疑問,我會提出。 – Bandita

0

也許這應該是一個評論,但我需要格式化&空間不存在。

像這樣的「自動提交」通常是有風險的,因爲它們有破壞原子性和信息丟失的風險。考慮以下情況:

  1. 兩位開發人員正在研究數據庫中的獨立更改。它們同時改變它們各自的表格,並且這個自動化選擇它並且將表格更改作爲一個單元提交。你如何區分這兩項活動?
  2. 當上述情況發生時,誰的名字進入存儲庫更改日誌?
  3. 開發人員正在進行廣泛的更改,涉及對多個表&存儲過程的更改。這種自動化獨立地承諾每個人。你如何「捆綁」這些用於記錄審計,審查所做的更改等?
  4. 在我的環境中,每個提交到代碼庫的更改都需要在提交消息中記錄更改ID。這在這裏如何工作?

我的建議是,你得到了需求改變。出現意外(壞)後果的方式太多了。

+0

我同意你的看法,但問題是,我們正在測試和生產環境中對其進行自動化。在測試和生產環境中發生這些錯誤的可能性要小得多。同樣爲了回答場景#4,如果我們自動化過程,那麼變更ID將與申請有關,如果有其他人試圖輸入變更,它將顯示他們的姓名,我們可以找出是否有任何篡改。 – Bandita

+0

在這些環境中甚至不需要這樣做,因爲如果不先停止源代碼管理和開發服務器,就不應該進行更改。您是否限制測試和生產(職責分離),以及促進從開發到測試到生產的變化的明確過程?如果沒有,這將無能爲力解決這個問題,並可能讓事情變得更加困惑。如果是這樣,這不應該需要。 – alroc

0

你是否將此作爲自動構建過程的一部分?如果是這樣,那麼知道您使用的是哪個構建工具和哪個源代碼控制工具會很有幫助。

這應該提供一些有用的資源:

http://www.red-gate.com/products/sql-development/sql-automation-pack/

有跡象表明,可以爲您的SQL Server數據庫執行有用的構建/測試任務楠和MSBuild的腳本。如果您想要進行更多自定義操作,可以使用版本控制系統命令行和SQL Compare命令行的組合。

1

我知道這個問題很老,但我正在做你正在描述的內容。

我有一個運行每隔X分鐘,並把數據庫的當前狀態到版本控制工作(對我們來說反覆無常,但你可以做到精確地使用Git或任何同樣的事情)。

cd c:\data\SourceCodeDirectory 
hg pull 
hg update 
if not exist "c:\data\SourceCodeDirectory\databaseName" mkdir "c:\data\SourceCodeDirectory\databaseName" 
cd "c:\Program Files (x86)\Red Gate\SQL Compare 11" 
sqlcompare /s1:DBServer /db1:databaseName /scr2:"c:\data\SourceCodeDirectory\databaseName" /synchronize 

cd c:\data\SourceCodeDirectory\databaseName 
hg add 
hg commit -m "Database Changes" -u DatabaseSchemaUser 
hg push 

只要此作業運行,對數據庫所做的任何更改都將在版本控制中進行。