如何避免在重新运行加载数据的SSIS包时重新插入数据(重复)到SQL Server表中?

问题描述 投票:3回答:2

我创建了一个包是SSIS。它第一次插入时工作正常。当我通过SQL Server代理作业运行包时,我在预定作业插入数据时插入重复项。

我不知道如何停止插入多个重复记录。

我期望在通过SQL Server作业运行已部署的包时删除重复项插入

enter image description here

sql-server ssis duplicates etl sql-server-data-tools
2个回答
2
投票

有两种方法可以做到这一点:

(1)使用SQL Command

如果源和目标位于同一服务器上,则可以使用此选项

由于您使用的是ADO.NET源,因此可以将数据访问模式更改为SQL命令,并仅选择目标中不存在的数据:

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

(2)使用Lookup Transformation

您可以使用查找转换来获取源和目标之间的不匹配行,并忽略重复项:


0
投票

为了删除重复项,请使用带有以下查询的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语句,这是一种更高效的替代方案。

© www.soinside.com 2019 - 2024. All rights reserved.