如果 dbo.table 数据中存在名称,则 SSIS 移动文件

SSIS Move file if name exists in dbo.table data

我使用的是 SSIS 2010。我有一个文件夹,里面有很多文件,我需要:

  1. 检查文件名是否存在于 table 数据中 - 因此,文件名是否也在数据列中(这是满足特定条件的文件列表)
  2. 如果文件名匹配,则将其移动到另一个位置,如果不匹配,则保持原样,然后移动到下一个文件进行检查(我猜是 foreachloop)。

现在我已经完成了变量移动(例如 month.txt 等),但不知道如何检查 table 数据。

有人可以帮忙吗?谢谢

在遍历目录中文件的 foreach 循环中:

创建执行 SQL 任务。将 SQL 语句设置为

SELECT count(*) as countrecords FROM ETL_Log WHERE ImportedFname='whatever.txt'

当然,您必须将其设置为一个表达式,以便 whatever.txt 替换为您的 foreach 循环中的文件名。

双击执行 SQL 任务。在常规选项卡下,将 'ResultSet' 属性 设置为 'Single row'。通过这种方式,它期望从您的查询中获得单个输出 - 该文件被导入的次数计数。

在 'Result Set' 下,将结果名称设置为 0,将变量名称设置为 User::count。 因此,每次循环查看目录中的新文件时,您都会知道该文件之前是否已移动。 (假设您在导入结束时写入 table)。

然后您可以双击连接执行 sql 任务和下一个任务(移动文件)的绿色箭头(优先约束)。将评估操作设置为 'Expression and Constraint'。将表达式设置为@[User::count]==0

现在,当 exec 语句在您的 table 中使用相关文件名计算零行时,您的用户计数变量将设置为零,并且优先约束计算为真,从而继续下一个移动文件的步骤。如果 user::count 不等于零(即已经移动),它将不会对该文件做任何进一步的操作,并移动到 foreach 循环中的下一个文件。我在我的很多 ssis 包中使用了这种类型的设置,并且效果很好。希望能帮助到你。