Sql-Server

SSIS:如何檢查記錄是否存在於平面文件中但存在於數據庫中

  • February 8, 2019

我正在準備一個 SSIS 作業,我將 .CVSV 文件導入到 OLE DB 目標(sql 數據庫)。我們將每天獲取這些文件。.CSV 文件包含醫生的記錄。每行代表一個醫生。下圖顯示了我如何能夠成功地做到這一點。到目前為止沒有問題。 在此處輸入圖像描述

以下是我需要幫助的內容:

如果醫生不再活躍,我們將獲得相同的 .CSV 文件,但沒有他/她的記錄。如何檢查記錄是否不在 .CSV 文件中但它存在於 SQL 數據庫中?我需要更新 SQL 數據庫中的醫生行並將該行的 IsActive 欄位更新為 false。

如何檢查記錄是否不在 .CSV 文件中但它存在於 SQL 數據庫中?

有一個暫存表 (例如dbo.tmp_DOCTORS,或您遵循的任何命名約定),它將首先截斷*(每次載入 CSV,請確保截斷暫存表)*,然後導入整個 CSV。然後,您可以通過檢查特定記錄是否在臨時表中來更新主表。

通過這種方式,您可以更好地控制流程,只更新主表或向主表添加新記錄。您可以使用 TSQL (Merge) 或SSIS來完成。

這就是我們所做的,它在主表上產生的成本更少,因為您將只更新或添加已更改的記錄。

此外,我真的很喜歡軟刪除 IsActive= TRUE 或 FALSE的想法。這樣您也可以保留歷史記錄。

不確定這是否是一個正確的答案,但目前我的代表太低,無法發表評論。我有類似的任務,我通過儲存過程將載入表與目標表進行比較(在你的 ssis 包中執行 sql 步驟)。就像是:

With Inactive as
(
-- returns doctor id's that appear in the Load table but NOT in the target table
   select doctorId
   from LoadTable
   except
   select doctorId
   from TargetTable
)
Update TargetTable set
   active = 'no'
from TargetTable tt
inner join Inactive cte on cte.doctorId = tt.doctorId ;

希望這可以幫助。

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