SSIS移动时将日期添加到文件名

时间:2018-05-18 10:07:28

标签: ssis

我在一个文件位置有一个csv,我试图移动并重命名到另一个位置。

目前我有一个带有文件系统任务的for循环。

For循环查找位置为@ProcessingFilePath

的所有csv文件

我将名称和扩展名写入名为@ProcessedFileName的变量。

我还有另一个名为@ArchiveFilePath的变量,这是我想移动文件的地方。

所以我有一个表达式为

的文件连接管理器
@ProcessingFilePath + "\\" + @ProcessedFileName

然后在文件系统任务中 - 源连接将是上面的文件连接管理器。

目的地我正在尝试创建另一个类似于@ArchiveFilePathandName的变量,我已经得到了以下表达式(我已经从另一个网站捏了一下)。

@[User::ArchiveFilePath] 
+ SUBSTRING( @[User::ProcessedFileName] , 1 , FINDSTRING( @[User::ProcessedFileName],".",1) - 1 ) 
+ "-" + (DT_STR, 2, 1252) Month( @[System::StartTime] )
+ (DT_STR, 4, 1252) Year( @[System::StartTime] )
+ SUBSTRING( @[User::ProcessedFileName] , FINDSTRING( @[User::ProcessedFileName],".",1) , LEN( @[User::ProcessedFileName] ) ) 

但是我收到一个错误说:

  

长度-1对于函数SUBSTRING无效。长度   参数不能为负数。将长度参数更改为零或a   正值。

我不知道该怎么做。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题是你的文件中没有点的文件。 FINDSTRING函数返回-1,后续SUBSTRING失败,因为它无法从-1开始。

解决方案是检查文件是否预先有一个点以完全阻止SUBSTRING。您可以使用三元运算符? :执行此操作。

FINDSTRING(@[User::ProcessedFileName],".",1) > 0 ?

    @[User::ArchiveFilePath] 
    + SUBSTRING( @[User::ProcessedFileName] , 1 , FINDSTRING( @[User::ProcessedFileName],".",1) - 1 ) 
    + "-" + (DT_STR, 2, 1252) Month( @[System::StartTime] ) + (DT_STR, 4, 1252) Year( @[System::StartTime] )
    + SUBSTRING( @[User::ProcessedFileName] , FINDSTRING( @[User::ProcessedFileName],".",1) , LEN( @[User::ProcessedFileName] ) ) 

    :

    @[User::ArchiveFilePath] 
    + @[User::ProcessedFileName]
    + "-" + (DT_STR, 2, 1252) Month( @[System::StartTime] ) + (DT_STR, 4, 1252) Year( @[System::StartTime] )

表达式确实是SSIS的一个弱点,这是一个很好的例子。