【问题标题】: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 的数据流对于其他数据流。这将仅根据脚本任务中设置的变量执行一个或另一个数据流。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多