SSIS

时间:2017-03-29 09:47:47

标签: sql-server ssis

我在SSIS包中使用平面文件连接源。文件名具有以下命名约定,即<<filename><year><month><date><time>>。示例 - sample201703291515.txt。由于文件创建时间不同,文件名将附加不同的time。我在连接字符串中创建了表达式来获取当前日期的名称。

"c:\source\sample"+(DT_STR,4,1252)YEAR( DATEADD( "dd", -1, getdate() ))+DT_STR,4,1252)MONTH( DATEADD( "dd", -1, getdate() ))+(DT_STR,4,1252)DAY( DATEADD( "dd", -1, getdate() ))+".txt"

但是由于时间的变化,有没有可能动态获取文件名,还是有任何我可以添加的表达式?请帮忙。

2 个答案:

答案 0 :(得分:3)

处理此问题的常用方法是使用遍历文件夹中所有文件的foreach循环。然后使用脚本任务查看文件名并将其与某些已知模式进行比较。所以如果你知道你想要&#34; sample20170329xxxx.txt&#34;在xxxx是某个未知时间字符串的地方,您可以在脚本任务中使用Regex,也可以只比较文件名的子字符串,只查看名称时间部分之前的字符,看看是否&# 39; s你想要的文件。

然后,如果它是您想要的文件,则将连接字符串设置为使用该文件名,否则循环到下一个文件。

答案 1 :(得分:0)

将所有文件名存储在一个对象变量中。创建一个 Foreach 循环容器。在每个循环迭代中,在字符串变量中分配当前文件名。在连接管理器中,右键单击并查看属性。在属性中选择“表达式”。 然后选择椭圆,这将打开一个新窗口。选择 ConnectionString 作为属性并单击椭圆。现在拖放所需的变量以使其成为动态的。

另请参阅Dynamic Flat File Connections in SQL Server Integration Services