2013-05-14 62 views
1

我有一個產品,我當前正在創作,它依賴SQL Server作爲後端。我試圖解決的一個問題是改善'升級'的故事。所以v1將有一個特定的模式,並且v2可能包含對此模式的一些增強(新表格和新列)。以編程方式在SQL Server上查找並應用模式差異

我知道RedGate和ApexSQL的SDKs,但是很想避免。

我已經閱讀了SMO文檔,但是我對它很陌生,並且很努力地想知道這是否可以應用在這個situtaiton中。理想情況下,我希望能夠製作這個程序(SMO或其他) - 基本案例看起來很直觀,但如果我能幫到的話,我真的不想重新發明輪子。有沒有人有任何類似的要求或想法我可以接近的經驗?

回答

1

也許不正是您需要的信息(因爲它不是SMO),但在看看實體框架代碼優先遷移可能會幫助您:

http://msdn.microsoft.com/en-us/data/jj591621

變化的模型類可以可以直接應用到數據庫,或者,如果您無法直接訪問數據庫,則可以爲新版本生成SQL代碼並將其交給數據庫管理員。

+0

我正在使用EF Code First - 所以會檢查CF Migrations - 感謝您的鏈接。 – 2013-05-14 13:37:51

2

你不說你正在使用什麼版本的SQL Server,但在(我認爲)2005年及以後,有數據庫觸發器的概念。這些工作像他們的表級表兄弟,但可以用來跟蹤發生在數據庫上的任何類型的DDL變化。我們沒有使用它來實際生成DDL - 更多用於跟蹤表格格式何時更改。儘管你所追求的應該是可能的,但我曾想過。

觸發器是劃分開發人員的事情之一。有些人認爲自切片面包以來他們是最好的,而其他人則以激情憎恨他們。也許是因爲當數據發生變化時,這些是你想到的最後一件事。

+1

您正在描述的有趣的方法,我曾經有過觸發器的經驗,我對他們很好我知道我沒有指定我使用EF,所以我不確定它是否會在我的工作案例 - 如果不是至少對類似案件有用。 – 2013-05-14 13:42:12

+0

這是一個有趣的一邊。如果我冒險猜測,我懷疑EF會以與在SSMS GUI中進行更改時類似的方式生成DDL。雖然我不會打賭我的房子... :) – 2013-05-14 14:12:59

1

我們使用Visual Studio中的數據庫項目來管理模式的版本控制。在數據庫項目中創建基準後,您可以在項目中進行更改,然後使用模式比較來創建SQL腳本以在不同環境中應用更改。

我建議只做添加劑更改,但它會生成破壞性更改的更改腳本。如果您沒有同步環境,我強烈建議爲每個環境生成一個新腳本。

本博客文章中介紹瞭如何在Visual Studio 2012創建一個:http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

紅門有模式比較產品太多,但我還沒有真正使用它。