簡體   English   中英

管理兩個開發人員的sql更改腳本的最佳方法是什么?

[英]What's the best way to manage sql change scripts for two developers?

到目前為止,我一直是我客戶項目中的孤狼。 任何時候我都會對SQL Server進行更改:表更新,存儲過程等。我會生成更改腳本並將其放入目錄中。 當應用程序准備好發布時,我會在實時服務器上運行腳本並完成。

很快我將有另一個開發人員在同一個項目上工作。 項目文件都在源代碼管理中。 我只是不確定如何處理更改腳本。 我猜它們也應該受源代碼控制? 如果是這樣,最好的命名約定是什么? 我究竟如何確定下一個版本要執行哪些腳本? 請記住,這是一個相當低調,非正式的Web項目,沒有任何版本號或項目管理軟件。

謝謝。

是的,你應該把它們放在源代碼管理中。 命名約定與其一致無關緊要。 一種方法是在每個腳本的文件名中附加一個人工(創建一個)應用程序版本號。 如果您提供更多詳細信息,我們可能會為您提供更好的命名示例。 但是,你肯定希望它們在源代碼控制中。

我們將更改腳本控制為.sql文件,然后將sql文件的執行順序保存在批處理文件中,該文件也受源代碼控制。 批處理文件使用sql文件作為參數調用OSQL:

SQLScripts.Bat:

SET BASEDIR=%%1
SET SERVER=%%2
SET DATABASE=%%3

CALL RUNISQLW CreateUserPresets %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW CreateFundWorkflows %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW spFundWorkflowAddFromTemplate %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW spFundWorkflowListForGrid %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW spWorkflowTasksListForGrid %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW fGetToleranceDate %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW fGetNotifyDate %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW spWorkflowTasksManager %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW spWorkflowTasksAnalyst %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW spWorkflowTasksNotify %BASEDIR% %SERVER% %DATABASE%
CALL RUNISQLW AddGateFrequency %BASEDIR% %SERVER% %DATABASE%

pause

RUNISQLW:

@REM First Parameter: Name of SQL file, without the .SQL extension.
@REM Second Parameter: Base Directory to run the file in.
@REM Third Parameter: Name of the server to run the file on.
@REM Fourth Parameter: Name of the Database on the server.

osql -S %3 -d %4 -E  -i %2\%1.sql -o %2\Output\%1.txt

然后,我們從deployment.bat文件中為每個配置environemt,Dev,Staging或Production調用SqlScripts批處理文件。 這使得它在配置中保持一致。

我建議解決的一個重要組件是訂購 - 文件應包括(可能在開頭)某種可排序的日期和時間戳。 這樣,您就可以准確地測試和調試腳本執行的順序

我目前將我的sql更改腳本存儲在一個文件夾中並命名它們,腳本訂單號,表名,更改說明

1-用戶創建-table.sql

2-用戶添加-columns.sql

...

ñ

當我執行這些腳本時,我將它們移動到一個名為“release 2009-09-01”的新文件夾中,然后繼續下一個數字

如果您使用的是VS Team Edition,則可以使用數據庫版本為正在使用的sql server版本創建數據庫項目。

然后,從數據庫構建項目,以便將所有函數,視圖和表格放入項目中。

然后,無論何時進行更改,都可以在項目中進行更改,因此可以輕松地在svn中(每個文件都在那里)然后您可以同步您的sql server數據庫。

這樣,您可以根據隊友所做的更改更新數據庫,而不會弄亂您的數據。

另一種方法是使用像http://www.red-gate.com/products/SQL_Compare/index.htm這樣的工具

它為單個部署生成更改腳本。 好消息是你不必依賴開發人員的紀律了。

除此之外,我還是喜歡在SVN中使用DB。 我使用SQLScript,請參閱ms sql中的腳本DB對象的免費實用程序

編輯

我現在使用Redgate SQL版本 使用它很容易將更改放入SVN。 唯一的問題是我必須啟動並使用應用程序,它不是一個自動化的過程。

開始學習如何在源代碼控制中使用分支。 在協同工作時,這可能非常有價值。

一些分支策略可以是:

  • 在開發人員之后命名分支(然后項目中的每個開發人員將負責使他們的分支與主線保持同步)。
  • 為每個功能創建一個新分支,然后在將其合並后再刪除分支(僅對分布式版本控制系統真正可行)

看看DBSourceTools中使用的修補引擎。
它專門用於幫助開發人員在源代碼控制下獲得SQL服務器數據庫。

此工具允許您在特定點建立數據庫基線,並創建命名版本(v1)。
然后,創建部署目標 - 並將指定版本增加到v2。
將補丁腳本添加到Patches目錄,以獲取對架構或數據的任何更改。
最后,檢查數據庫和所有補丁到源代碼控制中,與devs一起分發。

這給您帶來了一個可重復的過程來測試從v1到v2應用的所有補丁。
DBSourceTools還具有幫助您創建這些腳本的功能,即模式比較或腳本數據工具。

完成后,patch目錄中的所有文件都將成為您的版本,並將您的數據庫從v1升級到v2。

玩得開心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM