簡體   English   中英

如何在SQL Server中將表的數據從database1復制和覆蓋到database2

[英]How can I copy and overwrite data of tables from database1 to database2 in SQL Server

我有一個database1其中有500多個表,我有database2其中也有相同數量的表格,並在這兩個數據庫中的表的名稱相同..某些表有不同的表定義,例如表reportsdatabase1有9列和表reportsdatabase2有10個。

我想將所有數據從database1復制到database2 ,如果結構不匹配,它應該覆蓋相同的數據並追加列。 我在SQL Server 2008中嘗試了導入導出向導,但在復制行的最后一步時卻給出了錯誤。 我現在沒有該錯誤的屏幕快照,這是我的辦公室PC。 它說將錯誤插入到只讀列xyz ,有時它說vs_isbroken ,因為我提到的只讀列錯誤啟用了標識插入,但沒有幫助。

請幫我。 對我來說,這是在我辦公室的機會。

SSIS和SQL Server 2008向導可以是挑剔的工具。

如果出現“無法插入ABC列”,則可能是以下之一:

  • 插入PK列->設置映射時,您需要指出要覆蓋該值
  • 插入到較小范圍的列中->例如,從nvarchar(256)插入nvarchar(50)
  • 插入計算列中(由@ Nick.McDermaid指出)

如果您的數據庫使用了引用完整性,那么您也可能會遇到問題(大多數這樣做)。

如果您打算更頻繁地執行此操作,則建議您構建一個SSIS包,而不要使用向導工具。 這樣,您將看到關於各種問題的警告,例如我上面描述的問題。 然后,您可以按需運行您的程序包。

我會提出的另一個建議是,將DB1插入DB2的“ stage”表中。 這些表應該沒有關系完整性,並且可以使您將過程分為以下幾個步驟。

  • 將數據從DB1登台到DB2
  • 生成有關數據庫/規則相關問題的報告/查詢
  • 使用SQL將階段表中的數據合並到目標表中

最后一步是您可以使用合並語句,或根據鍵匹配使用簡單的插入/更新的位置。 然后,在本地數據庫中使用SQL可以使用集合論來管理兩個集合的重疊,並找出新的或要更新的內容。

SSIS可以做到這一點,但是您將無法使用SSIS進行批量更新,而使用SQL可以。 SSIS會執行所謂的RBAR(行使行痛苦),這很慢,應該避免。

我建議您告知您的老年人,這將花費一些時間來確保它的可靠性和可報告的結果。 然后逐步進行工作,報告每個階段的完成情況。

另外兩個小建議:

  • 創建每個階段表的_Archive表,並向每個表添加一個Tstamp列。 在階段步驟之后合並到其中,這將使您快速查看何時將哪些行引入到DB2中
  • 在階段之后和SQL合並步驟之前,請在階段表上創建索引。 這將改善合並性能
  • 每次合並后刪除那些索引,這將提高批量插入的性能

分期基礎(回答問題澄清):

鏈接:

分段是將數據從一個位置移動到另一位置而無需進行任何檢查的行為。

  1. 首先,您需要創建目標表,架構應與源表匹配。
  2. 打開BIDS並創建一個新項目,並在其中創建一個新的SSIS包。
  3. 在程序包中,為源服務器創建一個連接,為目標創建另一個連接。
  4. 然后創建一個數據流步驟,在該步驟中,為要復制的每個表創建一個數據源。
  5. 將每個源連接到新的數據目標並設置適當的連接和表。
  6. 完成后,保存並進行測試運行。

在數據流步驟之前,您可能想添加一個SQL步驟,該步驟將截斷所有目標表。

如果您願意使用工具,那么使用Red Gate Sql CompareRed 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM