我有一个包含以下数据的平面文件
Id,FirstName,LastName,Address,PhoneNumber
1,ben,afflick,xyz Address,5014123746
3,christina,smith,test address,111000110
1,ben,afflick,xyz Address,5014123746
3,christina,smith,test address,111000110
4,nash,gordon,charlotte NC ADDRESS,111200110
我创建了一个具有平面文件源的SSIS包,以及一个聚合函数,该函数确保只插入唯一行,而不是平面文件中的重复记录,以及SQL表作为目标。
当我运行包时,一切都很好,我在SQL表中得到低于输出
Id FName LName Address phoneNumber
1 ben afflick xyz Address 5014123746
4 nash gordon charlotte NC ADDRESS 111200110
3 christina smith test address 111000110
但是当我向平面文件中添加一些新数据时,如下所示
Id,FirstName,LastName,Address,PhoneNumber
1,ben,afflick,xyz Address,5014123746
3,christina,smith,test address,111000110
1,ben,afflick,xyz Address,5014123746
3,christina,smith,test address,111000110
4,nash,gordon,charlotte NC ADDRESS,111200110
5,abc,xyz,New York,9999988888
并重新运行包,表中已存在的数据将重新插入,如下所示
1 ben afflick xyz Address 5014123746
4 nash gordon charlotte NC ADDRESS 111200110
3 christina smith test address 111000110
1 ben afflick xyz Address 5014123746
5 abc xyz New York 9999988888
4 nash gordon charlotte NC ADDRESS 111200110
3 christina smith test address 111000110
但我不想要这个,我不想要插入已经存在的数据。 我只想将新添加的数据插入到SQL表中。
有人可以帮助我实现这个目标吗?
答案 0 :(得分:1)
您的数据流任务看起来像这样。这里,Flat文件源读取CSV文件,然后将数据传递给Lookup转换。此转换将检查目标表中的现有数据。如果没有匹配的记录,则CSV文件中的数据将被发送到OLE DB目的地,否则,数据将仅被丢弃。 查找转换链接---
http://www.codeproject.com/Tips/574437/Term-Lookup-Transformation-in-SSIS
答案 1 :(得分:1)
另一种方法是将文件加载到数据库中的临时表中,然后使用merge语句将数据插入目标表。
实际上,这看起来像是从平面文件到登台表的数据流,然后是包含合并语句的执行sql任务。 如果愿意,您也可以更新任何匹配的值。
merge into table_a
using stage_a
on stage_a.key = table_a.key
when not matched then insert (a,b,c,d) values ( a,b,c,d )