我有一个 ssis 包,它可以将足够简单的数据从文本文件导入到数据库表中。导入文件名需要配置为动态源,因为文件名会发生变化。所以我的文件名将具有以下模式:
bookNames_Shopping_05_02_2016.txt --> bookNames_Shopping_ 将保持不变,但日期戳会改变。
我设置了一个名为 filename 的变量,并在连接管理器的属性窗口中,将 ConnectionString 属性设置为 @[User::filename]。如何设置文件名变量以读取连接管理器指向的文件夹中的文件名?
附言我知道它可以在 For Each 循环中完成,但由于我没有多个文件,而是一个需要处理的文件,我 ** 不想使用 for each 循环。
文件的完整路径:\XYZYUC3312B6\SHARE\Bound\bookNames_Shopping_05_02_2016.txt
最佳答案
应用循环的另一种方法是使用表达式。假设正在读取的单个文本文件的名称中包含 SSIS 包将处理它的同一日期,您可以执行以下操作:
`"\XYZYUC3312B6\SHARE\Bound\" + @[User::FileName] + "_" +
RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , GETDATE()), 2) + "_" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , GETDATE()), 2) + "_" + (DT_STR, 4, 1252) DATEPART("yy" , GETDATE()) + ".txt"
选择左下角的“评估表达式”按钮。如果这有效,它应该显示您的完整文件路径,包括当前日期的串联。
\XYZYUC3312B6\SHARE\Bound\bookNames_Shopping_05_04_2016.txt
选择 OK 按钮,一切就绪。我在 SQL Server 2008R2 下的 BIDS 中运行了它。如果您使用的是 SQL Server 2012,那么在 Visual Studio 2010 中,您可以直接为 FileName 变量设置相同的表达式。
从这一点开始,只需在我们的数据流中应用 bookNames_Shopping 连接字符串。
关于ssis - 用于平面文件源的 sql server 数据工具动态文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009240/