我一直在从平面文件源开发SSIS软件包。该文件每天都有,文件名具有这样的日期指示:
filename_20190509042908.txt
我想知道如何直到日期部分。我希望包裹能动态读取文件,但是它应该通过最后6位数字的传递,因为它不一致,因为它不一致。
我想通过filename_20190509.txt
我已经弄清楚了如何将文件名获取直到删除时间部分的日期。因此,我很难通过在文件扩展程序之前忽略最后6位数字来动态读取文件名。
有人可以帮我吗?
从完整文件路径删除时间部分
假设完整的文件路径存储在名为 @[User::FilePath]
您必须在数据流任务添加Expression Task
之前添加类型字符串的变量(示例:@[User::Filename]
(,并使用以下表达式:
@[User::Filename] = SUBSTRING(@[User::FilePath], 1, LEN(@[User::FilePath]) -
FINDSTRING(REVERSE(@[User::FilePath]), "\", 1)) + "\" +
LEFT(TOKEN(@[User::FilePath],"\",TOKENCOUNT(@[User::FilePath],"\")),
LEN(TOKEN(@[User::FilePath],"\",TOKENCOUNT(@[User::FilePath],"\"))) - 10) + ".txt"
示例:
如果@[User::FilePath]
的值是
c: new文件夹 1 filename_20190503001221.txt
然后@[User::Filename]
将是:
c: new文件夹 1 filename_20190503.txt
如果您只有文件名为
filename_20190503001221.txt
,文件夹路径存储在另一个变量中,只需使用以下表达式:
@[User::Filename] = @[User::Folderpath] + "\" +
LEFT(TOKEN(@[User::FilePath],"\",TOKENCOUNT(@[User::FilePath],"\")),
LEN(TOKEN(@[User::FilePath],"\",TOKENCOUNT(@[User::FilePath],"\"))) - 10) + ".txt"
从变量读取文件源
单击用于读取源文件的平面文件连接管理器,按 f4 显示属性选项卡,单击表达式属性,然后将以下表达式分配给connectionstring
属性:
@[User::Filename]
现在将数据流任务更改为 Delay validation
属性值为 True
。
- SQL Server Integration Services中的动态平面文件连接
我必须假设您正在使用foreach循环,因为文件名正在更改,但这是如何将完全合格的名称更改为您想要的内容:
TOKEN(character_expression, delimiter_string, occurrence)
您的用法:
这将为您提供完整的文件名:
exp = TOKEN(@filename,"",LEN(@filename)-LEN(replace(@filename,"",""))
然后从那里您需要使用左Plus添加.txt
left(exp,LEN(exp)-10) + ".txt"