簡體   English   中英

如何避免在重新運行加載數據的SSIS包時重新插入數據(重復)到SQL Server表中?

[英]How to avoid re-inserting data (duplicates) into SQL Server table while re-running SSIS package that loads data?

我創建了一個包是SSIS。 它第一次插入時工作正常。 當我通過SQL Server代理作業運行包時,我在預定作業插入數據時插入重復項。

我不知道如何停止插入多個重復記錄。

我期望在通過SQL Server作業運行已部署的包時刪除重復項插入

在此輸入圖像描述

有兩種方法可以做到這一點:

(1)使用SQL Command

如果源和目標位於同一服務器上,則可以使用此選項

由於您使用的是ADO.NET源,因此可以將數據訪問模式更改為SQL命令,並僅選擇目標中不存在的數據:

SELECT *
FROM SourceTable
WHERE NOT EXISTS(
                SELECT 1
                FROM DestinationTable
                WHERE SourceTable.ID = DestinationColumn.ID)

(2)使用Lookup Transformation

您可以使用查找轉換來獲取源和目標之間的不匹配行,並忽略重復項:

為了刪除重復項,請使用帶有以下查詢的SQL任務(假設您沒有提取數百萬行,並且您希望刪除提取的數據上的重復項,而不是目標):

with cte as (

select field1,field2, row_number() over(partition by allfieldsfromPK order by allfieldsfromPK) as rownum)
delete from cte where rownum > 1

然后使用數據流任務並將干凈的數據插入目標表。

如果您只是不想插入重復項,一個非常好的選擇是使用MERGE語句,這是一種更高效的替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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