SSIS包失败,新的平面文件结构

时间:2009-12-04 01:01:08

标签: sql-server-2005 ssis etl

SSIS包只是从txt文件导入到sql数据库。当我们使包使用旧文件并执行正常时。旧的源文件得到(10列) 新的源文件有15列。 当源文件更改失败时。 [平面文件源[1]]错误:数据转换失败。列“列10”的数据转换返回状态值4和状态文本“文本被截断,或者目标代码页中的一个或多个字符不匹配”。 列的变化造成了问题 如何以更好的方式解决这个问题?如果需要使用相同的包处理新旧格式文件。

由于

1 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,您有一个文件(我假设的文件名相同),它具有旧的或新的文件格式并且失败,因为您的平面文件源只有旧的(10列)数据文件架构?如果是这种情况,我会创建一个布尔变量并将其称为isOldFormat。然后,我将在您的控制流中使用脚本任务来确定它是否有10或15列。伪代码将是这样的:

1)打开平面文件2)根据您的分隔符计算列3)条件规则:

如果columns.Count = 10    isOldFormat = True 否则如果columns.Count = 15    isOldFormat = False 其他   抛出错误

然后我会创建另一个具有新文件格式模式的数据流(现在基本上你有两个数据流 - 一个用你的旧文件格式,一个用新文件格式)。

在此步骤之后,您可以将优先约束从脚本任务拖动到新创建的数据流,将一个拖动到旧数据流。通过双击您的先前约束,您可以将赋值器操作属性设置为Expression,并在表达式框中输入@isOldFormat == true,以获取包含旧平面文件源和@isOldFormat == false的数据流的约束对于其他数据流。这样做只会根据脚本任务中设置的变量执行一个或另一个数据流。

希望这会有所帮助。