【问题标题】:Import data from Excel using SSIS without knowing the file name在不知道文件名的情况下使用 SSIS 从 Excel 导入数据
【发布时间】:2017-10-17 20:17:55
【问题描述】:

我正在开发一个 SSIS 包,该包将用于将数据从 Excel 文件导入 SQL Server。我目前的努力是弄清楚如何在事先不知道它的名称的情况下使 SSIS 包准确地引入一个 excel 文件。我有一个目录,将同时包含0n excel 文件。我只想提取创建时间最早的文件。这可能吗?

我正在使用 Visual Studio 2015 构建 SSIS 包。我的数据库在 SQL Server 2016 中。

【问题讨论】:

    标签: sql-server ssis etl sql-server-2016 sql-server-data-tools


    【解决方案1】:

    创建动态文件连接:

    1. 创建数据类型字符串的新变量(名称示例:'SourceFile')。

    2. 在“For Each Loop Container”中映射“变量映射”选项卡下的该变量,并将“枚举器配置”设置为正确的文件夹和文件扩展名。 “For Each Loop Container”将从该位置读取文件并将文件名分配给变量。

    3. 在文件连接的表达式属性中,将 ConnectionString 属性设置为 @[User::SourceFile]

    这应该使您的文件源动态。无论文件名如何,它都会提取文件,但文件格式必须一致。

    仅使用 SSIS 任务,我不知道如何利用文件的创建日期来选择最旧的文件,但如果文件名包含文件的创建日期,您可以将日期从 @[User ::SourceFile] 变量并将其存储在另一个变量中,每次执行“For Each Loop Container”以确定哪个文件最旧。

    【讨论】:

    • 感谢您的回答。我遇到的问题是我一次只想引入一个文件,而不是文件夹中的所有文件。如果我这样做,包不会带入该位置的所有文件吗?
    • 如果 For Each 循环中没有其他任务,它将仅读取文件名并将其分配给 @[User::SourceFile]。除非您将这些任务置于循环中,否则它不会移动任何文件或执行任何其他任务。您可以使用循环仅确定最旧文件的名称,一旦您知道最旧文件的名称,将该值分配给另一个变量(例如:@[User::SourceFileMaxCreateDate])并在 ConnectionString 中使用该新变量文件连接的属性
    • 嗯。我没有想到。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多