Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将平面文件中的一行接一行插入OLEdb Destination db?_C#_Sql Server_Ssis - Fatal编程技术网

C# 如何将平面文件中的一行接一行插入OLEdb Destination db?

C# 如何将平面文件中的一行接一行插入OLEdb Destination db?,c#,sql-server,ssis,C#,Sql Server,Ssis,我有一个平面文件,其中有许多行和列由分隔符(|)分隔。在将行插入目的地之前,我必须通过匹配一些列来检查记录是否已经存在,如果存在,我必须只向该记录中添加金额字段值,然后它必须进入下一行进行插入 Flat file row: Row1= 100|10.35|abc|10/2018 Row2= 100|15.35|abc|10/2018 Row3= 101|20.00|xyz|10/2018 我尝试了查找转换,然后我意识到只有当表已经有记录时匹配用例才有效,如果表是空的,我们就不能进行查找,因为平

我有一个平面文件,其中有许多行和列由分隔符(|)分隔。在将行插入目的地之前,我必须通过匹配一些列来检查记录是否已经存在,如果存在,我必须只向该记录中添加金额字段值,然后它必须进入下一行进行插入

Flat file row:
Row1= 100|10.35|abc|10/2018
Row2= 100|15.35|abc|10/2018
Row3= 101|20.00|xyz|10/2018
我尝试了查找转换,然后我意识到只有当表已经有记录时匹配用例才有效,如果表是空的,我们就不能进行查找,因为平面文件记录以批方式插入。如果表是空的,则整行没有匹配的大小写,然后插入所有行。但我必须对平面文件记录进行过滤,以便在插入前对每一行进行过滤

Flat file row:
Row1= 100|10.35|abc|10/2018
Row2= 100|15.35|abc|10/2018
Row3= 101|20.00|xyz|10/2018
要加载到oledb dest db中的目标

Row1= 100|25.70|abc|10/2018  (25.70 == Row1 amount + Row2 amount)
Row3= 101|20.00|xyz|10/2018`enter code here`

我将使用聚合转换

  • 使用平面文件源和“|”分隔符读取
  • col1,3,4和sum col2上的agg变换群
  • 加载到表中

  • 你可以在SSIS中做各种事情,但我不会。就我个人而言,我总是将整个文件加载到一个暂存表中,然后在sql查询中执行其余操作。我发现更容易验证我是否将整个文件放入了sql,并且发现这样管理起来更容易。当然SSIS的粉丝可能不同意,所以我会等待第二个意见!我会将整个数据加载到一个临时表(可能使用SSIS包),然后将信息分组并插入到其最终目的地,最后删除/清除临时表。我认为添加unique(复合作为检查多列)约束可以做到这一点。首先在表中必要的列上添加约束,然后从平面文件中插入批量行。尝试插入时,第二行和以后的重复行应自动失败。请使用AggregateTransformation@Yahfoufi。谢谢你的建议。聚合就是它的工作方式。非常感谢@KeithL,我已经测试了聚合tranf。在我的电脑。它的工作很好,同样我将申请在我的项目