兩個數據庫都具有相同的模式,但它們可能在某些表中與主鍵發生衝突。所以我希望他們只忽略重複的行,並繼續進一步合併。如何在SQL Server中合併兩個數據庫?
回答
首先一個鍵的衝突表明無論你目前使用的是什麼過程是一個窮人。
要正確合併兩個正在使用自動生成(non_GUID)鍵的數據庫,您需要執行幾個步驟。首先向父表添加新的自動生成的密鑰,然後從兩個表中導入所有數據,將舊的舊文件重命名爲ID_old,並將新文件重命名爲舊的ID名稱。此時,您可以移動子表。您將需要通過連接到父表並將新的id字段作爲外鍵的值而不是現有表中的值來複制到子表。您需要爲每個外鍵表重複此過程,並且如果該表也是父表,則需要在複製任何數據之前將轉換ID字段添加到表中,以便您可以一直沿着鏈條工作。要正確地做到這一點,需要掌握大量數據庫結構和大量計劃知識。如果沒有兩個源數據庫的良好備份,請不要考慮這樣做。當這兩個數據庫處於單用戶模式時,這個過程也是最好的。
如果您使用自然鍵並有重複項,則會遇到完全不同的問題。所有重複的密鑰記錄都應首先轉移到單獨的表格中,並確定哪些數據應該更準確。在某些情況下,您會發現自然鍵實際上並不是唯一的(它們很少是我爲什麼幾乎不使用它們的原因),並且合併的數據庫需要使用某種類型的自動生成的鍵。這將涉及代碼更改以及數據庫更改,因此它是最後選擇。
你經常用自然鍵找到的是每個數據都是不同的,但是在這種情況下是同樣的(在地址中的聖地亞哥街),在插入時標記其中一個記錄,然後何時在兩個步驟中插入首先是沒有重複的記錄,然後是重複表中標記爲插入的記錄。請記住,您必須檢查所有外鍵表中的所有記錄,以確定要保留哪些內容,哪些不保留。只是丟棄任何重複的東西是一個壞主意,你會以這種方式丟失數據,可能是關鍵數據(如客戶的訂單)。這是一個冗長乏味的過程,需要具有數據專業知識的人來做出判斷。作爲一名程序員,您應該爲他們提供一個重複數據刪除工具,讓他們檢查每組重複數據的所有數據,並選擇要保留的內容和要清除的內容,然後標記爲全部,然後運行插入記錄的過程。記住在你的設計中,對於真正的重複,將會有一些子表(例如訂單)需要來自兩者的記錄,這兩個記錄被髮送到數據庫以用於選擇要記錄的記錄(訂單是示例),其他表你會想要選擇哪個是正確的(例如地址)。所以你可以看到這是一個複雜的過程,需要對數據庫有透徹的理解。
如果您有很多重複項,它們可能會清理並將數據添加數個月,所以工具非常重要。做這件事的人可能是系統用戶而不是數據庫專家或程序員,因爲他們是唯一真正能夠判斷哪個記錄保持最大的判斷的人。可能您需要在任何情況下都會做出類似的事情,因爲即使您有自動生成的密鑰,也可能有重複的記錄。他們更難找到。
有沒有簡單的方法來合併兩個數據庫(即使使用GUIDS,你有自然鍵中的重複問題)。
最好的辦法可能是與第三方應用程序,如RedGate SQL Data Compare。花費一些錢,但它是值得的寫腳本國際海事組織。
對於如果您有主鍵爲IDENTITY這裏是我的建議(不應該要求修改架構)。
- 設立的所有外鍵,以便
ON UPDATE CASCADE
設置 - 更新的主鍵/標識字段父表並添加你要合併到相應的表領域的最高值(然後FKS將從this forum answer級聯值的子表)
- 執行相同的子表
- 按照建議的PK /標識字段,並使用插入每個表中的
SET IDENTITY_INSERT
ON/OFF兩側,從父表開始,然後移動到子表
我知道這是一個老話題,但我有很多的職位的一般方法我看到評論,並正在試圖使用SQL查詢本身做的一切。這些解決方案的共同之處在於,在應用它之前需要花費相當大的時間來創建和測試查詢。
所以,是的 - 你可以合併使用本身比較複雜的查詢,兩個數據庫,但是你可以爲自己節省大量的時間和使用第三方工具免費(大部分或全部具有全功能的免費試用)。
市場上有很多這樣的產品。紅門,在其他崗位已經提到的,是最好的一個,但你也可以嘗試ApexSQL Data Diff,dbForge,SQL Comparison toolset等等。
你可以只添加其他字段(稱爲DatabaseID爲例)的所有表在合併數據庫,並把它添加到主鍵。這樣你就可以保持原來的鑰匙,而在合併後的數據庫具有獨特的鍵 - 你可以告訴了行,來自哪個數據庫。這就是SQL-Hub所做的 - 如果只是一項工作,您可以免費試用。
這是我近幾年來做了兩次這樣的事情:http://byalexblog.net/merge-sql-databases
- 1. 合併兩個SQL Server數據庫
- 2. 如何在SQL Server 2008中合併兩個數據庫?
- 3. 合併SQL Server數據庫
- 4. 如何在phpmyadmin中合併兩個Wordpress SQL數據庫?
- 5. 合併2個SQL Server數據庫
- 6. 如何合併來自兩個DateTime列(SQL Server)的數據?
- 7. 合併兩個數據庫
- 8. 從SQL Server中的兩個查詢合併數據2005
- 9. SQL Server:合併兩個表中的數據
- 10. 在SQL Server中合併數據類型
- 11. SQL - 將兩個數據庫表合併到一個數據庫表中
- 12. 將數據從舊SQL Server數據庫合併到新更新的SQL Server中
- 13. 如何在單個存儲過程中合併兩個不同的SQL Server 2012數據庫表?
- 14. SQL Server - 同步兩個數據庫
- 15. 同步兩個SQL Server數據庫
- 16. SQL Server:如何同步不同數據庫中的兩個表?
- 17. 如何合併單個數據庫中的兩個表?
- 18. 多個SQL數據庫合併到一個數據庫中
- 19. MySQL兩個用戶數據庫合併
- 20. 從兩個數據庫表中合併/合併字段
- 21. SQL Server 2008的合併兩個查詢
- 22. 如何顯示GridView中SQL Server數據庫中兩個表的數據?
- 23. 如何合併SQL中的兩個表?
- 24. 如何在SQL Server中調試合併?
- 25. 合併兩個或兩個以上的行SQL Server 2000中
- 26. 使用JSON數據在SQL Server 2016中加入兩個集合
- 27. 如何在sql server 2005中編寫sql server數據庫圖表?
- 28. 如何在SQL Server 2005中恢復SQL SERVER 2008數據庫
- 29. 如何同步兩個SQL Server 2005數據庫?
- 30. 如何在SQL Server中創建數據庫的數據庫圖
有什麼開源的選擇! – Ish 2009-05-26 10:06:24