我一直在从平面文件源开发 SSIS 包。该文件每天出现,文件名具有如下日期时间指示:
文件名_20190509042908.txt
我想知道我怎么能通过直到日期部分;我希望包动态读取文件,但它应该通过没有最后 6 位数字我只是不需要最后 6 位数字,因为它不一致。
我想通过 Filename_20190509.txt
我已经想出了如何在删除时间部分之前使用文件名。因此,我很难通过忽略文件扩展名前的最后 6 位数字来让包动态读取文件名。
任何人都可以帮我解决这个问题吗?
最佳答案
从完整文件路径中删除时间部分
假设完整的文件路径存储在名为 @[User::FilePath]
的变量中。
您必须添加一个字符串类型的变量(例如: @[User::Filename]
),在数据流任务之前 添加 Expression Task
并使用以下表达式:
@[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 Folder\1\Filename_20190503001221.txt
然后
@[User::Filename]
将会:C:\New Folder\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
属性(property):@[User::Filename]
现在更改数据流任务
Delay validation
属性值到 True
.关于sql - 重命名文件源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063479/