2017-05-05 62 views
3

我期待找到以下問題與微軟SQL Server的一個簡單的解決方案:合併來自多個MS SQL Server數據庫的數據到一個

  • 我有一組數據庫,這些都是建立與完全相同的架構
  • 它們都含有不相交的數據集

的我現在想所有這些獨立DBS在一個單一的一個組合。所以基本上是一個愚蠢的複製&粘貼。然而,我現在想到了一個難題,即我必須保持外鍵關係完好,儘管所有的主鍵都會改變。

所以我對此一個問題是:

  • 是我要考慮有沒有其他問題?
  • 是否有一些工具可以執行這個簡單的任務,或者我必須編寫自己的工具/腳本?

非常感謝你, 亞歷

+0

另一個可能值得考慮的選擇是,不要破壞當前存在的任何東西,就是保持現有的混亂結構,並簡單地創建一個SQL查詢數據來查詢。這條路線有輕微的表現,但比實際移動的數據風險要小得多。 – user2366842

回答

4

選項1:腳本是SQL

內如果你把它們放在同一個SQL Server上,你可以寫一個跨數據庫查詢可以拉所有的數據庫和插入行到一個很容易,但正如你所說,由於像外鍵的擔心可能會變得複雜。

選項2:使用SQL集成服務

保持在SQL的解決方案可能意味着使用類似的SSIS,構建了一個遷移過程,但是這將複雜的快無疑讓你與更好只是自己創建一個腳本。

方法3:使用代碼坐在DB的頂部和ORM

如果DB模式是足夠複雜的,你可以考慮使用基於代碼的方法,並建立在數據庫之上的ORM模型。

這將有一個額外的好處,即從一個副本到另一個副本可以完成「一次一個實體樹」,從本質上允許您保持事物之間的關係,而無需保留原始ID,因爲數據移動時可能會發生與其他數據庫中使用的相同ID衝突。

方案4:出口=>進口

導出DAT afrom源數據庫,然後導入到目標DB,我相信SQL服務器具有這種類型的事情嚮導,可能能夠處理整個數據庫的操作,我有一個有趣的感覺,儘管最後一次我嘗試了這一點,但它只適用於一次簡單的平面設置。

我將如何解決這個

個人...我的「最快解決方案」將是ORM方法,主要是因爲我是一名開發人員,並且擁有C#和Entity Framework的強大技能,我將用它來實現這一點。

您可能更

如果你是在心臟一個DBA雖然你可能更適合於「寫一個遷移腳本自己在SQL辦法」(asusming你可以把數據庫的一臺服務器上)。

0

最簡單的方法是與合併數據庫的額外SYSTEM_ID場(添加到所有表)值1 - 服務器之一,2 - 服務器的兩個...

所有外國鍵添加這個領域SYSTEM_ID和所有的唯一鍵(也是PK),現在你可以從兩個系統插入數據(在insert中將system_id設置爲1或2),不需要創建新的主鍵(並且替換子表中的值)。 而且在所有的選擇和連接中,你也必須使用這個新的system_id字段(所以原始選擇不會不改變它)。

困難的方法(用於遷移,但最容易選擇)是添加所有表的system_id字段和PK_original字段。在這種情況下,您必須將原始PK插入PK_original字段(並且您將擁有一個帶有標識的新PK字段),並且在任何子表中,對於每個子值,您必須將原始PK值替換爲新創建的遷移一。 但另一方面,您從原始數據庫中選擇的所有內容都將運行,而無需更改任何內容。

相關問題