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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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中有一个场景。我有一个软件包,它是从平面文件到数据库的简单数据移动。 我有一个特定的位置,当文件出现在文件夹中时,我希望执行该包。使用WMI事件监视程序任务逐步执行 创建WMI连接管理器。在本地运行时使用Windows凭据(您必须是管理员才能访问WMI事件信息),在远程运行时输入凭据(请确保加密您的包!) 添加新的WMI事件监视程序任务。使用WQL查询配置WQLQuerySource属性以监视特定文件夹中的文件 WQL类似于SQL,但有点偏离,下面是我用来查看文件夹的示例: SELE

我在SSIS中有一个场景。我有一个软件包,它是从平面文件到数据库的简单数据移动。 我有一个特定的位置,当文件出现在文件夹中时,我希望执行该包。

使用WMI事件监视程序任务逐步执行
  • 创建WMI连接管理器。在本地运行时使用Windows凭据(您必须是管理员才能访问WMI事件信息),在远程运行时输入凭据(请确保加密您的包!)
  • 添加新的WMI事件监视程序任务。使用WQL查询配置WQLQuerySource属性以监视特定文件夹中的文件
  • WQL类似于SQL,但有点偏离,下面是我用来查看文件夹的示例:

    SELECT * FROM __InstanceCreationEvent WITHIN 10 
    WHERE TargetInstance ISA "CIM_DirectoryContainsFile" 
    and TargetInstance.GroupComponent= "Win32_Directory.Name=\"c:\\\\WMIFileWatcher\"" 
    
    分解此查询超出范围,但请注意筛选器中的目录名以及使其工作所需的字符串转义

  • 为每个循环创建一个循环,并将其附加到WMI事件监视程序任务。使用Foreach文件枚举器进行设置,并将文件夹设置为您正在监视的文件夹
  • 在For Each循环编辑器的Variable Mappings选项卡中,为变量指定文件名
  • 使用该变量名对文件执行操作(例如,将其分配给平面文件连接的ConnectionString属性,并在数据流任务中使用该连接),然后将文件归档到其他位置
  • 在下图中,此包将一直运行,直到添加了文件,并对其进行处理,然后完成

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


    当这些事件被触发时,你也可以考虑和踢掉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的,可能需要提到这一点。