SSIS - 仅加载某些记录 - 略过剩余的记录

时间:2015-04-02 20:37:23

标签: sql ssis ssis-2012

我有一个平面文件,我将其加载到SQL中,并且该平面文件具有基于RecordType的2种不同的RecordType和2种不同的文件布局。 所以我可能有

000010203201501011 (RecordType 1)
00002XXYYABCDEFGH2 (RecordType 2)

所以我想立即检查RecordType1的记录,然后通过[Derived Column]& [数据转换]& [加载到SQL]

我想忽略RecordType2的所有记录。

我尝试了条件性拆分,但似乎RecordType2的记录仍然试图通过[派生列]和[数据转换]步骤。

它在RecordType2 Records上给我一个DataConversion错误。

我将条件分割设置为RecordType == 1以通过我设置的过程。

我猜条件分割是不是设置为以这种方式使用? 在我的过程中,我可以告诉它检查RecordType1并且仅发送经过该点的RecordType = 1的记录吗?

1 个答案:

答案 0 :(得分:0)

由于您可能已根据记录类型1记录定义了列及其数据类型,因此记录类型2行的数据类型错误非常合理。我看到了三个选项来实现你想要做的事情:

  1. 在控制流中有一个脚本任务,只复制记录类型1 记录到数据流将使用的新文件 已经有了(亲:你不需要触摸数据流,Con: 读取文件两次),或者
  2. 在现有数据流中:而不是从中获取所有列 数据源,读取来自文件的每一行作为一个大胖子 列,然后是Derived Column获取RecordType,然后是条件 拆分,然后是派生列,重新创建您拥有的所有列 在数据源中定义,或
  3. 如果您有另一个包处理记录类型2行,这是理想的: 然后将文件转储到暂存区域中的数据库表中 替换数据流中的OLEDB数据源的数据源 (或者你使用的任何东西)并获得+用某些东西过滤记录 喜欢:SELECT substring(rowdata,1,5) AS RecordType, substring(rowdata,6,...) AS Column2, .... FROM STG.FileData WHERE substring(rowdata,1,5) = '00001'。如果使用这种方法,它会 最好有一个专门的RecordType列