SSIS循环容器与文件系统任务问题求助:文件名截断异常
SSIS仅处理过长文件名文件的实现方案
1. 新增判断变量
- 新建布尔类型变量
var_needTruncate,通过表达式定义“文件名过长”的判断逻辑:- 按**完整文件名(含扩展名)**判断:表达式设为
LEN(@[User::varfilename]) > 你设定的最大允许长度(比如认为超过30字符算过长,就写LEN(@[User::varfilename]) > 30)。 - 按**文件名(不含扩展名)**判断:先建字符串变量
var_fileNameNoExt,表达式为LEFT(@[User::varfilename], FINDSTRING(REVERSE(@[User::varfilename]), ".", 1) - 1),再把var_needTruncate的表达式设为LEN(@[User::var_fileNameNoExt]) > 你的阈值。
- 按**完整文件名(含扩展名)**判断:表达式设为
2. 拆分File System Task逻辑
在For Each Loop Container内添加两个File System Task:
- 任务1:处理过长文件名
- 优先约束设置为
@[User::var_needTruncate] == True - 目标变量
var_destination保留你原有的截取表达式,比如截取右侧15字符的话:@[User::varfiledirectory] + LEFT(@[User::varfilename], LEN(@[User::varfilename]) - 15)
- 优先约束设置为
- 任务2:处理正常长度文件名
- 优先约束设置为
@[User::var_needTruncate] == False - 目标变量
var_destination表达式改为直接拼接原路径:@[User::varfiledirectory] + @[User::varfilename]
- 优先约束设置为
3. 统一源路径配置
确保两个File System Task的源变量var_source表达式一致:@[User::varfiledirectory] + @[User::varfilename],始终指向原始文件。
内容的提问来源于stack exchange,提问作者user3073172
相关产品推荐
相关产品推荐

