如何从特定文件夹中拾取动态文件,然后使用SSIS导出到SQL server



我一直在尝试创建一个SSIS任务,该任务从特定文件夹中拾取MS Access文件然后导出到SQL Server(如果在服务器中找到该文件/表,则跳过其他导出(。

我是SSIS的新手,我使用脚本任务动态选择文件名,然后尝试移动,但最终得到了不满意的结果。即使我在谷歌上搜索过,也没有什么想法,但还是没能按照我想要的方式找到。任何详细的帮助都会很有帮助。

注意:在这里,我并不总是确定该文件夹(即动态(的文件名

有许多用于动态选择文件的选项。由于您不确定文件名,我假设这是一个参数或变量。以下是从变量中检查文件夹中给定文件名并将其加载到SSISobject变量的示例。然后使用Foreach Loop将这些文件加载到SQL Server表中。您提到的是文件,而不是单个文件,因此本例假设只传入文件名的一部分,例如将日期/UID附加到文件名的开头或结尾时的情况。

  • 添加一个脚本任务,参数/变量将文件和文件夹名保存为ReadOnlyVariables,对象变量将在执行过程中存储文件名作为ReadWriteVariable。这方面的代码在这篇文章的末尾。string.IndexOf方法用于检查包含给定文本的文件,StringComparison.CurrentCultureIgnoreCase参数用于使此搜索不区分大小写。本例使用一个变量作为文件路径,使用一个参数作为文件名(在参数名中用$Package表示(
  • 添加Foreach From Variable Enumerator枚举器类型的Foreach Loop。将脚本任务中填充的对象变量添加为"集合"页面上的变量。在"变量映射"窗格中,在索引0处添加一个字符串变量。这需要是一个空字符串变量,用于保存每个文件的名称
  • 从示例数据文件创建平面文件连接管理器。请确保正确配置了列名和数据类型。要动态设置文件名,请选择ConnectionString表达式(单击连接管理器的"属性"窗口中"表达式"属性的省略号(,然后从Foreach Loop的"映射窗格"中添加相同的字符串变量
  • Foreach Loop中,使用相同的连接管理器添加具有平面文件源的数据流任务。然后在目标连接中添加OLE DB或SQL Server目标,并将平面文件源连接到该目标。我发现SQL Server Destinations的性能更好,但在做出选择之前,您需要在自己的环境中验证这一点。选择必要的表,并相应地映射平面文件源中的列。

    List<string> fileList = new List<string>();
    //get files from input directory
    DirectoryInfo di = new DirectoryInfo(Dts.Variables["User::FilePathVariable"].Value.ToString());
    foreach (FileInfo f in di.GetFiles())
    {
    //check for files with name containing text
    if (f.Name.IndexOf(Dts.Variables["$Package::FileNameParameter"].Value.ToString(), 0, StringComparison.CurrentCultureIgnoreCase) >= 0)
    {
    fileList.Add(f.FullName);
    }
    }
    //populate object variable
    Dts.Variables["User::YourObjectVariable"].Value = fileList;
    

相关内容

最新更新