重命名文件源

时间:2019-05-09 16:04:03

标签: sql sql-server ssis ssis-2012

我一直在从平面文件源开发SSIS包。该文件每天发送一次,文件名具有如下所示的日期时间指示:

Filename_20190509042908.txt

我想知道如何才能通过日期部分;我希望软件包动态读取文件,但是它应该不带最后6位数字通过,我只是不需要最后6位数字,因为它不一致。

我想传递Filename_20190509.txt

我已经弄清楚了如何删除日期部分之前的文件名。因此,我很难通过忽略文件扩展名前的后6位数字来使程序包动态读取文件名。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

从完整文件路径中删除时间部分

假定完整文件路径存储在名为@[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


如果只有文件名为

  

文件名_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

答案 1 :(得分:0)

我必须假设您正在更改文件名的同时已经在使用foreach循环,但这是如何将完全限定名称更改为您想要的名称:

TOKEN(character_expression, delimiter_string, occurrence)

您的用法:

这将为您提供完整的文件名:

exp = TOKEN(@filename,"\",LEN(@filename)-LEN(replace(@filename,"\",""))

然后从那里开始使用左键并添加.txt

left(exp,LEN(exp)-10) + ".txt"