我在一个文件位置有一个csv,我试图移动并重命名到另一个位置。
目前我有一个带有文件系统任务的for循环。
For循环查找位置为@ProcessingFilePath
我将名称和扩展名写入名为@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 正值。
我不知道该怎么做。有没有更好的方法来解决这个问题?
答案 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的一个弱点,这是一个很好的例子。