SSIS条件分裂条件

时间:2013-08-26 12:04:52

标签: sql ssis

 !(((ISNULL(Phone))&&(ISNULL(WorkPhone))&&(ISNULL(OtherPhone)))&&(((ISNULL(Phone))||

((!ISNULL(Phone))&&(PhoneXPC==1)))&&(((ISNULL(WorkPhone))||((!ISNULL(WorkPhone))&&

(WorkPhoneXPC==1)))&&(((ISNULL(OtherPhone))||((!ISNULL(OtherPhone))&&(OtherPhoneXPC==1)))))

这种情况有没有任何人可以帮助我们...... 我们在这种情况下涉及6列,它包含三种类型的电话号码和三位XPC columns,用于每个记录的相应电话号码。

我们允许为电话号码列添加空值,其各自的XPC column也将为空。

因此,如果这些XPC列中的任何一个包含0,那么该人应该放在一个文件中,如果这些XPC列中的任何一个不包含0但是可以包含null应该放在另一个文件中。

我正在使用visualstudio 2005

提前致谢

2 个答案:

答案 0 :(得分:2)

该复合条件非常令人讨厌,使我想要使用脚本组件:

screenshot of suggested data flow

脚本组件(此处为SCR_DetermineTarget)配置为同步转换,将TargetId列添加到数据流。以下条件拆分逻辑变得简单地将TargetId与您选择的任何值进行比较。我选择使用1表示所有XPC字段均为零,2表示至少有一个XPC字段为非零,但所有电话号码均为空。

下面的代码(在VB中,因为您指定了VS 2005)适当地设置TargetId

Public Overrides Sub MyInput_ProcessInputRow(ByVal Row As MyInputBuffer)
    Dim targetId As Integer
    targetId = 0

    If Row.PhoneXPC = 0 Or Row.WorkPhoneXPC = 0 Or Row.OtherPhoneXPC = 0 Then
        targetId = 1
    ElseIf Row.Phone_IsNull Or Row.WorkPhone_IsNull Or Row.OtherPhone_IsNull Then
        targetId = 2
    End If

    Row.TargetId = targetId
End Sub

如果那个逻辑不是你想要的东西,那么在VB.NET中修复它比在条件转换的内容中容易得多,仅仅基于可读性

答案 1 :(得分:0)

尝试使用!!

{

(((ISNULL(Phone)=="TRUE")&&(ISNULL(WorkPhone)=="TRUE")&&(ISNULL(OtherPhone)=="TRUE"))&&

(((ISNULL(Phone)=="TRUE")||((!ISNULL(Phone)=="TRUE")&&(PhoneXPC==1)))&&

(((ISNULL(WorkPhone)=="TRUE")||((!ISNULL(WorkPhone)=="TRUE")&&(WorkPhoneXPC==1)))&&

(((ISNULL(OtherPhone)=="TRUE")||((ISNULL(OtherPhone)=="TRUE")&&(OtherPhoneXPC==1)))))


 }

让我知道它是否有效

Ashutosh Arya