SSIS如何使用通配符读取今天的文件

问题描述 投票:0回答:1

在我们的文件夹中,我们的文件名格式为 myFile_yyyyMMddHHmmss.txt,例如:20230920095749.txt、20230919051704.txt。

如果今天是09/20/2023,在SSIS包中,我只想读取今天的文件,即上例中的20230920095749.txt。

然后,我想用此文件信息填充 SQL Server 表。

如何在 SSIS 包中执行此操作?

要读取带有日期戳的文件,我使用以下方法:

  1. 在脚本任务中,将用户变量“DateVar”设置为

    Dts.Variables["User::DateVar"].Value = DateTime.Now.ToString("yyyyMMdd");

  2. 在平面文件的连接管理器中,我将表达式设置为

    @[用户::输入文件路径] + @[用户::myFile] + "_" + @[用户::DateVar] + ".txt"

但是在SSIS中我如何读取具有动态日期戳和时间戳为myFile_yyyyMMddHHmmss.txt的文件,然后用文件数据填充SQL Server表? 谢谢你

sql-server ssis
1个回答
0
投票

我会采取不同的路线。

我将定义 4 个变量,全部为 String 类型

  • CurrentDate - 构建 YYYYMMDD 字符串,我使用的表达式是

    (DT_WSTR, 4)DATEPART("年份",@[系统::开始时间])

    • RIGHT("0" + (DT_WSTR, 2)DATEPART("月",@[系统::开始时间]),2)
    • RIGHT("0" + (DT_WSTR, 2)DATEPART("DAY",@[系统::开始时间]),2)
  • CurrentFile - 这将接收文件的完全限定路径

  • FileMask - 这将定义我们正在查找的文件的掩码或形状。我们将结合静态元素“myFile_”和 CurrentDate 加上通配符

    *
    该表达式为

    “myFile_”+@[用户::当前日期]+“*.txt”

FolderInput - 这是我们应该开始搜索的静态路径。我已将其初始化为“C:\ssisdata\Input\so_63605861”,但 UNC/网络路径也可以。

Foreach 文件枚举器

将 ForEach 枚举器添加到您的包中。我不在乎你只需要找到 1 个文件,这可以让你不用编写代码,更重要的是,让你不用维护它。

我的配置如下

您可以看到我们将枚举器更改为

Foreach File Enumerator
我们添加
Directory
的表达式以映射到
@[User::FolderInput]
FileSpec
映射到
@[User::FileMask]

最后,在“变量映射”选项卡中,我们将索引 0 分配给变量 @[User::CurrentFile]

测试

在命令提示符下,我创建了一个文件夹,其中包含示例文件

C:\>cd \ssisdata\Input
C:\ssisdata\Input>mkdir so_77144602
C:\ssisdata\Input>cd so_63605861
C:\ssisdata\Input\so_63605861>echo > myFile_20230919051704.txt
C:\ssisdata\Input\so_63605861>echo > myFile_20230920095749.txt

成功

© www.soinside.com 2019 - 2024. All rights reserved.