【问题标题】:SSIS: import MAX(filename) from folderSSIS:从文件夹导入MAX(文件名)
【发布时间】:2018-02-04 23:13:40
【问题描述】:

我需要从\\\Share\Folder\ 中选择一个具有最大文件名的.csv 文件以进一步导入SQL。文件名是字母数字,例如ABC_DE_FGHIJKL_MNO_PQRST_U-1234567.csv,其中数字部分会有所不同,但每次运行包时我都需要一个最大值。

约束:该 SQL 服务器上没有写访问权限,我使用 ##Temp 表进行导入,这是文件名处理最不理想的方法(此服务器上的每个循环都没有)。

理想情况下,它将是基于函数/表达式的变量(如果需要,与脚本任务结合)传递到连接管理器。任何想法都非常感谢。

【问题讨论】:

  • 您是否尝试过使用 for each 循环加载到 ADO 记录集中然后 MAX 出来? (第二部分我不太确定)
  • 您可以使用脚本任务来执行此操作,下面的答案中有更多详细信息

标签: sql-server variables ssis etl ssis-2012


【解决方案1】:

使用脚本任务

  • 添加字符串类型的变量User::CsvFile
  • 向您的项目添加脚本任务并将您创建的变量添加为 ReadWriteVariable

  • 在您的脚本任务中编写以下代码(VB.NET)

您必须导入 System.Linq

Public Sub Main()

    Dim strDirectory As String = "C:\New Folder" ' Enter =the directory
    Dim strFile As String = String.Empty

    strFile = IO.Directory.GetFiles(strDirectory, "*.csv", IO.SearchOption.TopDirectoryOnly).OrderBy(Function(x) x.Length).Last


    Dts.Variables.Item("CsvFile").Value = strFile

    Dts.TaskResult = ScriptResults.Success

End Sub
  • 然后使用平面文件源中的这个变量

【讨论】:

  • 不错!我看到 Linq 无处不在,每次我都感到惊讶和印象深刻。
  • @Nick.McDermaid 这个库真的很棒很强大
  • 即使我讨厌它,我也能看到它的力量,因为它不是 SQL :)
  • 嗨哈迪,非常感谢。抱歉回复晚了 - 正忙于其他优先任务。但是,我有“OrderBy 不是 System.Array 的成员”错误。我想 LINQ 已经到位,因为它是 .NET Framework 4.0。如果没有,如何导入?
  • 啊。找到这个 - 导入 System.Linq。请忽略以上内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2011-05-21
  • 2014-10-20
相关资源
最近更新 更多