我有一个ssis包,可以将简单的数据从文本文件导入到数据库表中。导入文件名需要配置为动态源,因为文件名将更改。所以我的文件名将具有以下模式: bookNames_Shopping_05_02_2016.txt - > bookNames_Shopping_将常量但日期戳将更改。
我设置了一个名为 filename 的变量,在连接管理器的属性窗口中,我将ConnectionString属性设置为@ [User :: filename]。如何设置filename变量以读取连接管理器指向的文件夹中的文件名? 附:我知道它可以在For Each循环中完成,但由于我没有多个文件但只有一个文件需要处理,我不想在每个循环中使用for。
文件的完整路径:\ XYZYUC3312B6 \ SHARE \ Bound \ bookNames_Shopping_05_02_2016.txt
答案 0 :(得分:3)
应用循环的替代方法是使用表达式。假设正在读取的单个文本文件在其名称中包含SSIS包处理它的相同日期,您可以执行以下操作:
`" \ XYZYUC3312B6 \ SHARE \束缚\" + @ [User :: FileName] +" _" +
右(" 0" +(DT_STR,2,1252)DATEPART(" mm",GETDATE()),2)+" _" + 右(" 0" +(DT_STR,2,1252)DATEPART(" dd",GETDATE()),2)+" _" + (DT_STR,4,1252)DATEPART(" yy",GETDATE())+" .txt"
选择左下方的“评估表达式”按钮。如果这样做,它应该显示您的完整文件路径,包括当前日期的串联。
\ XYZYUC3312B6 \ SHARE \束缚\ bookNames_Shopping_05_04_2016.txt
选择确定按钮,然后全部设置完毕。我在SQL Server 2008R2下的BIDS中运行它。如果您正在使用SQL Server 2012,那么在Visual Studio 2010中,您可以直接为FileName变量设置相同的表达式。
从这一点来说,只需在我们的数据流中应用bookNames_Shopping连接字符串。
答案 1 :(得分:2)
我会将循环用于一个文件,没有任何伤害。另一种选择是使用脚本任务以及directoryinfo和fileinfo类。传入目录,如果您希望在调用directoryinfo时将文件名的静态部分用作文件掩码。