Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
SSIS包设计,其中第三方数据替换现有数据_Ssis - Fatal编程技术网

SSIS包设计,其中第三方数据替换现有数据

SSIS包设计,其中第三方数据替换现有数据,ssis,Ssis,我在过去创建了许多SSIS包,尽管对这个包的需求与我所写的其他包有所不同 以下是业务需求的快速描述: 我们有一个来自第三方供应商的小型数据库,需要每晚覆盖。 此数据的来源是来自第三方供应商的一组平面文件(CSV) 当前设置:我们截断此数据库的表,然后通过SSI从文件中插入新数据 问题:有时文件无法到达,结果是我们截断了旧数据,尽管我们没有新的数据集。这使得我们没有一个数据库,在那里我们更希望有昨天的数据,而不是根本没有数据 理想的解决方案:在截断当前数据之前,我希望使用某种机制来查看新数据(这些

我在过去创建了许多SSIS包,尽管对这个包的需求与我所写的其他包有所不同

以下是业务需求的快速描述:

我们有一个来自第三方供应商的小型数据库,需要每晚覆盖。
此数据的来源是来自第三方供应商的一组平面文件(CSV)

当前设置:我们截断此数据库的表,然后通过SSI从文件中插入新数据

问题:有时文件无法到达,结果是我们截断了旧数据,尽管我们没有新的数据集。这使得我们没有一个数据库,在那里我们更希望有昨天的数据,而不是根本没有数据

理想的解决方案:在截断当前数据之前,我希望使用某种机制来查看新数据(这些文件)是否确实存在

我尝试的内容:我尝试从文件中捕获数据并将其添加到ADO记录集中,并且仅当此部分成功时才继续。这似乎对我不起作用,因为我在一个数据流中有所有的数据捕获活动,我看不到重用这些数据的方法。这样做,让内存中的表就坐在那里,对我来说似乎是浪费资源

在类似的情况下你做了什么

  • 若文件不存在,则将某些标志(如IsFile1Found)更新为false,并将这些标志传递给存储过程,存储过程将根据条件进行截断
  • 如果文件为空,则使用powershell通过执行流程任务可以提取前两行。如果有两行(标题+数据行),则表示数据文件不为空。然后可以截断表并导入数据。 其他办法可以是: 您可以将数据加载到某个暂存表中,并使用SQL存储过程从这些暂存表向目标表插入数据,并在数据移动到所有目标表后截断这些暂存表。这样,在截断目标表之前,可以检查临时表是否为空

  • 我环顾四周,发现其他一些人也在为同样的问题苦苦挣扎,尽管他们都没有一个非常优雅的解决方案,我也没有


    我最后做的是创建一个到每个感兴趣文件的平面文件连接,并有一个任务计数记录并保存到一个变量。如果文件不存在,则包将失败,此时您可以停止执行。有一些文件的实际计数对我来说很有趣,尽管在大多数情况下,我不在乎。如果你不在乎计数是多少,你可以继续循环使用相同的变量;这将减少您端变量的创建(我需要31个)。为了保留资源(读取:减少包执行时间),我排除了每个数据源中除一列以外的所有列;它带来了巨大的不同。

    不幸的是,Powershell不是我的选择,因为它不会听说它。