【问题标题】:Import Latest csv file in a folder - SSIS在文件夹中导入最新的 csv 文件 - SSIS
【发布时间】:2012-09-04 08:39:06
【问题描述】:

我想使用 SSIS 将最新的 csv 文件导入到表中?我目前有一个步骤可以获取文件夹中的最后一个文件:

 Report_201209030655.csv
 Report_201209030655.csv
 Report_201209030655.csv

根据创建时间,我想要将最新 csv 的数据导入表的步骤。

【问题讨论】:

  • 你不能把旧的/已经处理过的文件移动到单独的文件夹吗?我相信这是 ETL 中最常见的方法。
  • 在这一步之前,我实际上是在重命名文件并将其移动到一个新文件夹

标签: sql-server sql-server-2005 ssis etl


【解决方案1】:

参考这个解决方案:

[http://blog.sqlauthority.com/2011/05/12/sql-server-import-csv-file-into-database-table-using-ssis/][1]

然后使用脚本任务填充文件名并将该变量作为源组件的文件名传递。

获取最新文件代码:

   public void Main()
        {
            string[] files = System.IO.Directory.GetFiles(@"C:\SSIS\Files");
            DataTable NewList=new DataTable();
            DataColumn col = new DataColumn("FileName");
            NewList.Columns.Add(col);

            System.IO.FileInfo finf;
            foreach (string f in files)
            {
                finf = new System.IO.FileInfo(f);
                if (finf.LastWriteTime > DateTime.Now.AddHours(-24))
                {
                    NewList.Rows.Add(f);
                }
            }
            Dts.Variables["User::FileNameArray"].Value = NewList;

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

【讨论】:

  • 是的,但是在 Pinal 提到的平面文件源步骤中......我们要指定文件名。如果我指定了文件名,每分钟都会更改一次。还有我在哪里使用脚本组件?
  • 在平面文件源之前添加脚本任务,然后添加代码以获取最新文件名并将其分配给变量并在平面文件源中使用该变量
  • 在数据流任务中使用脚本任务
  • 当脚本组件尝试连接到平面文件源步骤时,我得到无法连接连接器错误。粘贴时脚本也会出错...语法错误
  • 我猜你必须在控制流中使用脚本任务
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 2020-06-18
相关资源
最近更新 更多