我创建了一个包是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语句,这是一种更高效的替代方案。