壞消息:你有很多選擇
使用簡單文件轉換:提取所有數據到flatfiles,用grep,awk中,sed的,C,Perl的成所需要的插入/更新語句操縱它們並執行那些反對目標數據庫
PRO:快速; CON:非常醜陋......保鏢的噩夢,如果你需要更長一個星期的時間,那麼不要這樣做。和幾十個處決
使用純sql:我不太瞭解sql服務器,但我認爲它已經遠離從另一個訪問一個數據庫,所以其中一個最好的辦法是做到這一點把它作爲一個'insert/update/merge語句的集合,用select語句提供。
PRO:快速,只有一種技術; CON:需要數據庫之間的直接連接根據轉換的類型,您可能會很快達到SQL的限制或可用的SQL知識。
使用t-sql或數據庫提供的任何迭代語言,其他所有內容都類似於純sql aproach。
PRO:相當快,因爲你不離開數據庫CON:我不知道t-sql,但如果它是像PL/SQL那樣的東西,它不是執行復雜轉換的最好語言。
使用高級語言(Java,C#,VB ...):您會將數據加載到適當的業務對象中,操作這些數據並將它們存儲在數據庫中。儘管聽起來有更好的ORM可用,但它與您目前正在做的似乎很相似。 nhibernate
使用ETL工具:有用於提取,轉換和加載數據的特殊工具。他們經常支持各種數據庫。並有許多策略可用於決定是否有更新或插入。
PRO:對不起,您必須向其他人諮詢,我到目前爲止只有不好的經驗。 CON:高度專業化的工具,您需要掌握。我個人的經驗:在實現和執行轉換後手寫SQL更慢。這是可維護性的噩夢,因爲所有東西都隱藏在專有存儲庫中,所以對於IDE,版本控制,CI,測試,如果存在任何工具提供者,您都會被卡住。
PRO:即使是複雜的操作也可以用乾淨的可維護方式實現,您可以使用IDE,測試框架,CI系統等所有花哨的工具在開發轉換時爲您提供支持。
CON:它增加了很多開銷(從數據庫中檢索數據,實例化對象,並將對象編組回到目標數據庫中)。如果它是一個正在進行的過程,我會這樣做
基於最後一個選項,您可以使用消息傳遞和Web服務進一步美化架構師,如果您擁有多個源數據庫或多個目標數據庫,則可能是相關的;或者你可以手動實現一個多線程變壓器,以獲得通過,但我想我離開你的問題的範圍。
+1正好 - ETL(extract - transform - load)最好:-) – 2009-06-19 16:53:35