SSIS包中使用的表达式是否存在嵌套级别限制?

时间:2012-02-14 18:12:19

标签: sql-server-2008 business-intelligence ssis

在SQL Server 2008中工作。我第一次尝试SSIS脚本,我需要模拟一些用VB.net编写的if / then条件逻辑。我无法找到任何先前有关表达式中嵌套条件的问题,并且相信我正在遵循我已经能够通过谷歌在派生列中的嵌套条件下发现的内容。

尝试在派生列转换编辑器中使用嵌套条件时收到错误。我收到的错误表明SSIS无法解析我的表达式。实际异常:“来自HRESULT的异常:0xC0204006(Microsoft.SqlServer.DTSPipelineWrap)”

答案可能会立即回答我的问题(并创建新问题)的问题:

  • 是否有嵌套级别限制?
  • 可以在[表达式]的condition1部分进行嵌套吗? [condition1]:[condition2]

我将给出两个片段,第一个是我实际插入的,第二个是更易于阅读的版本。希望有人可以指出我的错误。

不确定它是否有方位,但请注意[BusArea]是上一步中派生的一列。

实际表达:

[BusArea] == "CCC" || [BusArea] == "NBU" || [BusArea] == "CA" ? (ISNULL([CASE_MORG]) or TRIM([CASE_MORG]) == "" ? ( ISNULL([TRX_MORG]) or TRIM([TRX_MORG]) == "" ? NULL(DT_WSTR,50) : [TRX_MORG]) : [CASE_MORG]) : (ISNULL([CASE_AGT]) or TRIM([CASE_AGT]) == "" ? ( ISNULL([TRX_AGT]) or TRIM([TRX_AGT]) == "" ? NULL(DT_WSTR,50) : [TRX_AGT]) : [CASE_AGT])

格式化以便于阅读:

[BusArea] == "CCC" || [BusArea] == "NBU" || [BusArea] == "CA" ? 
    (ISNULL([CASE_MORG]) or TRIM([CASE_MORG]) == "" ?
        ( ISNULL([TRX_MORG]) or TRIM([TRX_MORG]) == "" ?
            NULL(DT_WSTR,50)
            : [TRX_MORG]
        )
        : [CASE_MORG]
    )
    : (ISNULL([CASE_AGT]) or TRIM([CASE_AGT]) == "" ?
        ( ISNULL([TRX_AGT]) or TRIM([TRX_AGT]) == "" ?
            NULL(DT_WSTR,50)
            : [TRX_AGT]
        )
        : [CASE_AGT]
    )

1 个答案:

答案 0 :(得分:1)

我认为嵌套条件没有任何限制。即使有一个,我也不认为我们会在我们创建的包中处理我们的业务流程。

你几乎把一切都搞定了。条件声明的问题在于您使用了 or 而不是 ||

我复制了您的确切语句并将其粘贴到Derived Transformation中的Data Flow task内并收到错误,因为该程序包无法解析表达式。我用正确的逻辑OR or's )运算符替换了所有 || ,并正确评估了表达式。

Issue with conditional statement