SSIS条件拆分以跳过具有数字的日期时间列中的行

时间:2013-05-23 05:39:55

标签: sql-server-2008 ssis split conditional

我有一个正在读取.csv文件的平面文件源。此文件具有日期时间列,其中某些行具有数字。我想在读取文件时使用条件拆分组件跳过日期时间列中包含数字的行。

  

ID日期PhoneNumber查询
    1 05/01/2013 15:40 9879879877 Sometext
    2 05/12/2013 8:30 9879879877 Sometext
    3 2

csv文件采用上述格式。每当Date列有一个数字时,PhoneNumber和Query列都是空白的,我试图在条件拆分中使用以下条件跳过第3行

  

******中国!= “”

条件拆分中的上述条件给出了以下错误:

  

表达“PhoneNumber!=”“”on“output”PhoneNumber“(282)”评估为NULL,但“组件”PhoneNumber检查“(262)”需要布尔结果。修改输出上的错误行处置,将此结果视为False(忽略失败)或将此行重定向到错误输出(Redirect Row)。对于条件性拆分,表达式结果必须为布尔值。 NULL表达式结果是错误。

当我在Query列中使用相同的条件时,它会跳过所有行

那么如何使用条件拆分跳过日期时间列中包含数字的行?

编辑:

我尝试上传的文件采用以下格式

  

ID日期PhoneNumber查询
    1 05/01/2013 15:40 9879879877 Sometext
    2 05/12/2013 8:30 9879879877 Sometext
    3 2
    4 05/12/2013 8:30 9879879877 Sometext
    5 05/12/2013 8:30 9879879877 Sometext
    6 05/12/2013 8:30 9879879877 Sometext
    7 3
    8 05/12/2013 8:30 9879879877 Sometext
    9 05/12/2013 8:30 9879879877 Sometext

在每个文件中都有大约3-4个需要跳过的错误行但由于某些原因,在上面的示例格式中,ID 3的行被跳过,ID 7的行被读取为3" "8(这是将Date行的ID 7列中的数值与ID 8混合或整合到整个下一行(ID 8行)以及所有带有ID 7的行的列将在一行中以ID 7行显示,并且将跳过包含{{1}}的行的所有空白列。我已经在记事本中打开了文件并检查了该特定行的逗号数,它们是正确的。文件是否有问题或包本身有什么问题?

1 个答案:

答案 0 :(得分:2)

您还需要检查Null条件

ISNULL([PhoneNumber]) || [PhoneNumber] != ""

ISNULL([PhoneNumber]) || LEN[PhoneNumber] != 0

它为我工作

示例日期: -

enter image description here

我没有在平面文件源组件

中选择选项retain NULL value from the Source选项

有条件的溢出表达

enter image description here

结果:

enter image description here

在上图中丢弃第3行。

顺便说一句,如果您只是想忽略包含无效DateTime值的行,请遵循以下建议

如果您只想验证日期列,则有3种方法: -

1.在平面文件源中将列类型更改为Datetime而不是string,并将错误行redirect更改为某个文件或表格。

2.使用derived transformation并将列投射到DT_DBTIMESTAMP并再次重定向错误行。

3.使用script组件并编写C#或Vb代码来解析[date]列,如

row.ValidDate = DateTime.Parse(row.Date);

ValidDate

中创建输出列Script component