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
File 仅当文件夹中存在完整文件时才运行SSIS_File_Ssis_Etl - Fatal编程技术网

File 仅当文件夹中存在完整文件时才运行SSIS

File 仅当文件夹中存在完整文件时才运行SSIS,file,ssis,etl,File,Ssis,Etl,我开发了一个使用平面文件的ETL。平面文件的大小从250 MB到300 MB不等。 当文件存在于文件夹中时,它的工作绝对正常。但当文件处于生成模式时,它会失败 例如:此ETL包从上午8点运行到上午10点,以检查文件夹中是否存在该文件。现在,在任何情况下(比如上午9点),如果文件开始生成,到现在为止,它是10MB。ETL开始处理文件,4-5分钟后挂起并失败(挂起脚本任务,读取文件是否存在于文件夹中) 只有在文件生成完成后,才触发SSIS包的最佳方法是什么 注意:我无法控制文件生成 为循环容器添加一

我开发了一个使用平面文件的ETL。平面文件的大小从250 MB到300 MB不等。 当文件存在于文件夹中时,它的工作绝对正常。但当文件处于生成模式时,它会失败

例如:此ETL包从上午8点运行到上午10点,以检查文件夹中是否存在该文件。现在,在任何情况下(比如上午9点),如果文件开始生成,到现在为止,它是10MB。ETL开始处理文件,4-5分钟后挂起并失败(挂起脚本任务,读取文件是否存在于文件夹中)

只有在文件生成完成后,才触发SSIS包的最佳方法是什么


注意:我无法控制文件生成

为循环容器添加一个带有布尔变量的
bFileAccessible

  • Init表达式是
    @bFileAccessible=False
  • Eval表达式是
    @bFileAccessible==False
For循环容器中
添加一个
Script任务
,其中包含一个ReadWriteVariable
User::bFileAccessible
和以下C#脚本(仅显示
Main()
方法):


您还应该为文件名使用一个变量,可能还有一点等待间隔。有关脚本的更多信息,请参阅。

每次检查文件修改时间,并与上一次相同。。。。
这不是一个好的逻辑,但如果没有完美的替代方案,这是一个好主意

您可以使用第三方并测试
文件是否可读
@OcasoProtal谢谢链接,但我的客户不允许我们使用任何第三方工具。因为他们还有其他项目/工作也在prod上运行,这对他们来说将是一个巨大的恐怖。我们已经尝试向他推荐其他第三方工具,但他只是希望我们开发相同的功能。:)当生成过程暂停一段时间时,这将不起作用。
    public void Main()
    {
        try
        {
            using (Stream stream = new FileStream("Path\to\your\file", FileMode.Open))
            {
                Dts.Variables["bFileAccessible"].Value = true;
            }
        }
        catch
        {
            Dts.Variables["bFileAccessible"].Value = false;
        }

        Dts.TaskResult = (int)ScriptResults.Success;
    }