【问题标题】:SSIS Package failing with New structure of FlatfileSSIS 包因平面文件的新结构而失败
【发布时间】:2010-12-23 02:03:58
【问题描述】:
SSIS 包只是从 txt 文件导入到 sql 数据库。当我们制作包时使用旧文件并且执行良好。旧的源文件得到了(10列)
新的源文件有 15 列。
当源文件更改失败时。
[平面文件源 [1]] 错误:数据转换失败。列“第 10 列”的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配。”。
列的变化造成了问题
如何以更好的方式解决这个问题?如果新旧格式文件都需要用同一个Package处理。
谢谢
【问题讨论】:
标签:
sql-server-2005
ssis
etl
【解决方案1】:
如果我正确理解您的问题,您有一个文件(我假设文件名相同)具有旧文件格式或新文件格式并且由于您的平面文件源仅具有旧(10 列)数据文件架构而失败?如果是这种情况,我将创建一个布尔变量并将其命名为 isOldFormat 之类的名称。然后,我将在您的控制流中使用脚本任务来确定它是否有 10 列或 15 列。伪代码是这样的:
1) 打开平面文件 2) 根据分隔符计算列数 3) 条件语句:
如果 columns.Count = 10
isOldFormat = 真
否则如果 columns.Count = 15
isOldFormat = 假
别的
抛出错误
然后我将创建另一个具有新文件格式架构的数据流(现在基本上您有两个数据流 - 一个使用旧文件格式,一个使用新文件格式)。
在这一步之后,您可以将优先约束从脚本任务拖到新创建的数据流中,并将一个拖到旧数据流中。通过双击您的优先约束,您可以将求值器操作属性设置为表达式,并在表达式框中键入 @isOldFormat == true 用于约束去往包含旧平面文件源和 @isOldFormat == false 的数据流对于其他数据流。这将仅根据脚本任务中设置的变量执行一个或另一个数据流。
希望这会有所帮助。