当文件到达文件夹时触发SSIS包的执行
我在SSIS中有一个场景。我有一个软件包,它是从平面文件到数据库的简单数据移动。 我有一个特定的位置,当文件出现在文件夹中时,我希望执行该包。使用WMI事件监视程序任务逐步执行当文件到达文件夹时触发SSIS包的执行,ssis,Ssis,我在SSIS中有一个场景。我有一个软件包,它是从平面文件到数据库的简单数据移动。 我有一个特定的位置,当文件出现在文件夹中时,我希望执行该包。使用WMI事件监视程序任务逐步执行 创建WMI连接管理器。在本地运行时使用Windows凭据(您必须是管理员才能访问WMI事件信息),在远程运行时输入凭据(请确保加密您的包!) 添加新的WMI事件监视程序任务。使用WQL查询配置WQLQuerySource属性以监视特定文件夹中的文件 WQL类似于SQL,但有点偏离,下面是我用来查看文件夹的示例: SELE
SELECT * FROM __InstanceCreationEvent WITHIN 10
WHERE TargetInstance ISA "CIM_DirectoryContainsFile"
and TargetInstance.GroupComponent= "Win32_Directory.Name=\"c:\\\\WMIFileWatcher\""
分解此查询超出范围,但请注意筛选器中的目录名以及使其工作所需的字符串转义
当这些事件被触发时,你也可以考虑和踢掉SSIS包。这就需要更少的持续运行开销,但它增加了额外的依赖性。WMI解决方案很有趣,但环境/设置要求对我来说有点复杂。我更喜欢在For循环容器中使用ForEach循环容器和executesqlwait任务来解决这个问题 我将ForEach循环容器配置为在目录中的文件上循环,并将其指向预期的文件名。此容器中的唯一任务是一个脚本任务,它递增一个Files\u Found变量-这只会在找到文件时发生 ForEach循环容器后面是一个执行SQL任务,在检查之间等待,例如,等待延迟'00:05:00'延迟5分钟 ForEach循环和executesql任务都包含在For循环中,该循环初始化并测试Files\u Found变量
此解决方案管理起来要简单得多-它不需要任何特定的设置、环境、权限、存储的凭据或WMI语法知识。请不要只要求我们为您解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获得一篇您真正需要阅读的优秀文章。事实上,我对此一无所知。目前,我必须在ssis中制作一个上传程序,这是早期在eagle pace中运行的。在eagle中,当文件到达某个特定位置时,eagle会自动检测并执行该文件。所以我可以手动执行包。但我想知道,当文件到达那个位置时,是否有任何方法可以触发那个包。或者我不知道从哪里开始。SSIS没有监视文件到达然后启动包的功能。您必须自己编写这样的功能。查看SSIS文件系统任务,看看它是否可以为您完成部分任务(也许它可以告诉您文件是否存在),然后查看其他SSIS任务。看看是否可以将它们放在一起解决问题。@JohnSaunders,嗯,SSIS有一个WMI事件观察程序任务,它的作用就是:观察事件(包括放在文件夹中的文件),然后对这些事件执行操作。回答得好,但您能稍微填写一下示例吗?也许可以展示任务是如何连接起来的?这将是一个很好的答案。我使用SSIS已经八年多了,从来都不知道这个功能。谢谢。顺便说一句,图像来自哪个SQL Server版本?它们都来自SSDT/Visual Studio 2012高级版。请尝试与Kyle Hale的答案竞争。我太忙了-你需要发挥你的想象力。在SSIS 2012中,你会使用表达式任务,而不是脚本任务,以获得更少的开销。另外,WAITFOR是特定于SQL Server的,可能需要提到这一点。