sql server数据工具用于平面文件源的动态文件名

时间:2016-05-03 16:15:22

标签: ssis

我有一个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

2 个答案:

答案 0 :(得分:3)

应用循环的替代方法是使用表达式。假设正在读取的单个文本文件在其名称中包含SSIS包处理它的相同日期,您可以执行以下操作:

  1. 创建一个名为" FileName"的用户变量; String类型。
  2. 创建一个名为" bookNames_Shopping"的新连接管理器。指向当前的完整路径" \ XYZYUC3312B6 \ SHARE \ Bound \ bookNames_Shopping_05_02_2016.txt"。
  3. 选择刚创建的新Connection Manager,然后打开它的解决方案资源管理器。
  4. 选择表达式。 “属性表达式编辑器”打开后,转到“属性”列,然后从下拉列表中选择“连接字符串”。在同一行上的“表达式”下的下一列中,选择“浏览”按钮。这将打开Expression Builder窗口。
  5. 在下面的文本框中"表达式:",输入以下内容:
  6.   

    `" \ 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时将文件名的静态部分用作文件掩码。