文件到达文件夹时触发SSIS包的执行

use*_*233 4 ssis

我在SSIS中有场景.我有一个包,它是从flatfile到数据库的简单数据移动.我有一个特定的位置,我想在文件夹上的文件时执行该包.

Kyl*_*ale 8

使用WMI事件监视器任务逐步执行

  1. 创建WMI连接管理器.在本地运行时使用Windows凭据(您必须是管理员才能访问WMI事件信息),并在远程运行时输入凭据(确保加密您的包!)
  2. 添加新的WMI事件监视器任务.使用WQL查询配置WQLQuerySource属性以查看文件的特定文件夹.

WQL类似SQL,但有点偏,这是我用来观看文件夹的例子:

SELECT * FROM __InstanceCreationEvent WITHIN 10 
WHERE TargetInstance ISA "CIM_DirectoryContainsFile" 
and TargetInstance.GroupComponent= "Win32_Directory.Name=\"c:\\\\WMIFileWatcher\"" 
Run Code Online (Sandbox Code Playgroud)

分解此查询超出了范围,但请注意过滤器中的目录名称以及使其工作所需的字符串转义.

在此输入图像描述

  1. 创建For Each循环并将其附加到WMI事件观察器任务.使用Foreach文件枚举器设置它,并将文件夹设置为您正在观看的文件夹.

在此输入图像描述

  1. 在For Each Loop编辑器的Variable Mappings选项卡中,将文件名分配给变量.

在此输入图像描述

  1. 使用该变量名对文件执行操作(例如,将其分配给平面文件连接的ConnectionString属性并在数据流任务中使用该连接),然后将文件存档到其他位置.

在下图中,此包将一直运行,直到添加文件,处理它,然后完成.

事件监视器连接到foreach文件枚举器

要使程序包永久运行,请将这两个任务包装在For循环中,并将EvalExpression设置为true == true.

在此输入图像描述

您还可以考虑使用PowerShell注册对象事件,并在触发这些事件时启动SSIS包.这需要使您的程序包持续运行的连续开销少一点,但它增加了额外的依赖性.