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

时间:2019-03-31 05:58:38

标签: sql-server ssis duplicates etl sql-server-data-tools

我创建的软件包是SSIS。第一次插入工作正常。当我通过SQL Server代理作业运行程序包时,在计划的作业插入数据时,我会插入重复的数据。

我对如何停止插入多个重复记录一无所知。

我希望在通过SQL Server作业运行已部署的程序包时删除重复项

enter image description here

2 个答案:

答案 0 :(得分:2)

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

(1)使用SQL命令

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

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

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

(2)使用查找转换

您可以使用Lookup转换获取Source和Destination之间的不匹配行,并忽略重复项:

答案 1 :(得分:0)

为了删除重复项,请对以下查询使用SQL Task(假设您未提取数百万行,并且要删除提取的数据中的重复项,而不是目标):

with cte as (

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

然后使用数据流任务并将干净的数据插入目标表中。

如果只不想插入重复项,一个很好的选择是使用MERGE语句,这是一种性能更高的替代方法。