Sql-Server

對沒有主鍵的兩個 csv 文件進行比較

  • October 19, 2012

我想知道在 SSIS 中是否有一種方法可以比較兩個沒有引用鍵的 csv 文件(具有相同的結構)以使記錄唯一。

從我的意思給你一個更好的畫面;在初始載入中,我們將 csv 文件中的數據載入到表中,在後續載入中,我們將獲得另一個可以具有不同記錄的 csv 文件(相同格式)。我們應該將表中的內容與新版本的 csv 文件中的內容進行比較,並且只載入更改的子集。如果有新記錄,則應插入,如果更新,則應更新,如果記錄在源中刪除,則應在表中將其標記為不活動。

現在我的問題是:

  • 有沒有辦法比較 SSIS 中的兩個 csv 文件,而沒有使記錄唯一的密鑰?
  • 我們如何在 SQL Server 中比較兩個表,而沒有使記錄唯一的鍵?

csv文件的數據量相當大,超過2000萬條記錄!

任何想法都值得讚賞。

謝謝,

納齊拉

如果您將第一個 CSV 載入到表中,則可以輕鬆地將另一個 CSV 載入到臨時表中(可能與“真實”表具有相同的結構)。然後你可以通過

SELECT * FROM staging_table
EXCEPT
SELECT * FROM real_table
;

新 CSV 中缺少的行可以反轉兩側EXCEPT。但是,鑑於暫存表上缺少鍵(希望不是真正的鍵-從您的問題中不清楚),基於此比較刪除行可能會很痛苦,尤其是在有這麼多行的情況下。

完成後,您可以刪除臨時表。

(據我所知,這種方法適用於任何 RDBMS。)

引用自:https://dba.stackexchange.com/questions/22143