[英]How can I copy and overwrite data of tables from database1 to database2 in SQL Server
我有一個database1
其中有500多個表,我有database2
其中也有相同數量的表格,並在這兩個數據庫中的表的名稱相同..某些表有不同的表定義,例如表reports
中database1
有9列和表reports
中database2
有10個。
我想將所有數據從database1
復制到database2
,如果結構不匹配,它應該覆蓋相同的數據並追加列。 我在SQL Server 2008中嘗試了導入導出向導,但在復制行的最后一步時卻給出了錯誤。 我現在沒有該錯誤的屏幕快照,這是我的辦公室PC。 它說將錯誤插入到只讀列xyz
,有時它說vs_isbroken
,因為我提到的只讀列錯誤啟用了標識插入,但沒有幫助。
請幫我。 對我來說,這是在我辦公室的機會。
SSIS和SQL Server 2008向導可以是挑剔的工具。
如果出現“無法插入ABC列”,則可能是以下之一:
如果您的數據庫使用了引用完整性,那么您也可能會遇到問題(大多數這樣做)。
如果您打算更頻繁地執行此操作,則建議您構建一個SSIS包,而不要使用向導工具。 這樣,您將看到關於各種問題的警告,例如我上面描述的問題。 然后,您可以按需運行您的程序包。
我會提出的另一個建議是,將DB1插入DB2的“ stage”表中。 這些表應該沒有關系完整性,並且可以使您將過程分為以下幾個步驟。
最后一步是您可以使用合並語句,或根據鍵匹配使用簡單的插入/更新的位置。 然后,在本地數據庫中使用SQL可以使用集合論來管理兩個集合的重疊,並找出新的或要更新的內容。
SSIS可以做到這一點,但是您將無法使用SSIS進行批量更新,而使用SQL可以。 SSIS會執行所謂的RBAR(行使行痛苦),這很慢,應該避免。
我建議您告知您的老年人,這將花費一些時間來確保它的可靠性和可報告的結果。 然后逐步進行工作,報告每個階段的完成情況。
另外兩個小建議:
分期基礎(回答問題澄清):
鏈接:
分段是將數據從一個位置移動到另一位置而無需進行任何檢查的行為。
在數據流步驟之前,您可能想添加一個SQL步驟,該步驟將截斷所有目標表。
如果您願意使用工具,那么使用Red Gate Sql Compare和Red Gate SQL Data Compare這樣的工具呢?
首先,我將使用數據比較來管理架構差異,然后將所需的新列從源(database1)添加到目標數據庫(database2)。 然后使用數據比較,根據您指定的處理方式名稱,將表的內容與表中無法匹配的任何列進行匹配。 然后,您可以選擇要從目的地復制的數據。 因此,您將看到什么是新數據,什么是不同數據(您可以刪除目標中不在源中的數據,也可以忽略它)。 您可以讓該工具完成工作,也可以創建一個腳本以在需要時運行。
如果您想進行實驗,可以進行15天的試用。
似乎您正在尋找SQL Server Replication提供的Replication技術。
好吧,如果我正確理解了您的要求,則需要使database2成為database1的副本。 為什么不對數據庫1進行完整備份並將其還原為數據庫2? 您的database2將與備份時的database1完全相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.