SSIS FOREACH:如果文件名已存在,则从SQL表中删除数据

时间:2017-12-01 17:05:43

标签: sql sql-server visual-studio foreach ssis

如果我说得非常糟糕,请道歉。我今天才开始使用SSIS。

我写了一个FOREACH,循环遍历文件夹中的所有文件,并将我的表f_actuals与没有扩展名的文件名一起更新 - 这个文件名是PeriodKey和Business Unit的组合。效果很好。

但是,这是每天从我们的系统上传每个业务部门的整个月(所以每月更新每天刷新,直到我们关闭那个时期),所以我真正需要的是FOREACH到包含以下内容: -

  • 根据f_actuals表中已有的文件名检查指定文件夹中导入的文件名
  • 从f_actuals表中删除所有匹配项
  • 继续我已经建立的FOREACH

我知道这可能是一种效率极低的方法(首选是每日增量上传),但文件需要是按月更新的,因为我们的系统无法轻易提供其他任何内容。

希望这是有道理的。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以在For Each循环中使用执行SQL任务来执行此操作。

您可以使用SQL语句:

DELETE
FROM f_actuals
WHERE filename = ?

或许是一个存储过程(接受你的文件名作为参数并做与上面的陈述相同的事情),例如:

EXEC DeleteFromActuals ?

对于循环中的每个文件名,您可以将其存储在变量中,并将该变量作为参数传递给执行SQL任务(这就是?)。

要在“执行SQL任务”中映射参数,请转到“参数映射”,然后添加新参数。从下拉列表中选择包含文件名的变量,选择数据类型VARCHAR,并将“参数名称”设置为0.“方向”应为“输入”,这是默认值。