2011-11-17 65 views
0

我正在開發一個使用多個數據庫的Grails應用程序,其他應用程序是隻讀的,1是應用程序的一種「主數據庫」。另外還有多種環境:dev,qa,prod。 qa用於釋放測試,與產品相同。如何覆蓋表結構和數據從db1到db2

總是在發佈測試之前,我需要用「main」prod-database覆蓋「main」qa-database。我沒有其他的SQL用戶訪問運行MS SQL實例的服務器。

我需要的是在qa-database中丟掉所有內容的所有東西而不刪除數據庫本身,並從prod數據庫中導入所有內容。數據庫包含很多外鍵約束。

如何實現上述?

P.S.

我在MySQL上做了這個,但現在我們已經遷移到了MS SQL。我的MySQL腳本去有點像這樣的(僞):

SET foreign_key_checks = 0; 
-- Drop all tables.. 
SET foreign_key_checks = 1; 
-- Import prod-dump to DB.. 
+0

[SQL SERVER 2005:將所有表,存儲過程,觸發器,constriants和所有依賴關係放在一個sql語句中]可能的重複(http://stackoverflow.com/questions/536350/sql-server-2005- drop-all-the-tables-stored-procedures-triggers-constriants-a) –

+0

@MichaelDurrant - 他也在重新創建所有的對象,所以它不是這個問題的一個騙局。 – JNK

回答

0

直T-SQL你不應該這樣做。

你真的應該在.NET中使用類似SMO Scripting這樣的導出對象。有乾淨的方式來做你在純SQL代碼中所要求的。

如果您計劃從系統表中構建動態SQL,那麼在T-SQL中解決這個問題的唯一方法就是太多的變量。

+0

是否可以通過JDBC獲取數據庫的轉儲/備份? – heikkim

+0

我不是JDBC的用戶,所以我不能肯定地說。 – JNK

0

我認爲工具"xSQL Data Compare"完全符合您的要求。至少對於qa-DB,您將需要「sa」訪問權限。

+0

感謝您的意見,但這不適合我。 – heikkim