在我们的文件夹中,我们的文件名格式为 myFile_yyyyMMddHHmmss.txt,例如:20230920095749.txt、20230919051704.txt。
如果今天是09/20/2023,在SSIS包中,我只想读取今天的文件,即上例中的20230920095749.txt。
然后,我想用此文件信息填充 SQL Server 表。
如何在 SSIS 包中执行此操作?
要读取带有日期戳的文件,我使用以下方法:
在脚本任务中,将用户变量“DateVar”设置为
Dts.Variables["User::DateVar"].Value = DateTime.Now.ToString("yyyyMMdd");
在平面文件的连接管理器中,我将表达式设置为
@[用户::输入文件路径] + @[用户::myFile] + "_" + @[用户::DateVar] + ".txt"
但是在SSIS中我如何读取具有动态日期戳和时间戳为myFile_yyyyMMddHHmmss.txt的文件,然后用文件数据填充SQL Server表? 谢谢你
我会采取不同的路线。
我将定义 4 个变量,全部为 String 类型
CurrentDate - 构建 YYYYMMDD 字符串,我使用的表达式是
(DT_WSTR, 4)DATEPART("年份",@[系统::开始时间])
CurrentFile - 这将接收文件的完全限定路径
FileMask - 这将定义我们正在查找的文件的掩码或形状。我们将结合静态元素“myFile_”和 CurrentDate 加上通配符
*
该表达式为
“myFile_”+@[用户::当前日期]+“*.txt”
FolderInput - 这是我们应该开始搜索的静态路径。我已将其初始化为“C:\ssisdata\Input\so_63605861”,但 UNC/网络路径也可以。
将 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
成功