谁能帮我解码 SSIS 派生列中的条件(?)运算符

Can any one help me to decode Conditional(?) Operator in Derived Column of SSIS

我必须在 SQL 查询中解码下面的表达式,但对 SSIS 不太熟悉,所以任何人都可以帮助我解码这个表达式。

D_UPDTD_LOAD_LOG_KEY =   CRCTD_LOAD_LOG_KEY > 0 ? FINDSTRING(@[User::LV_LoadLogKey],LTRIM(RTRIM((DT_WSTR,35)CRCTD_LOAD_LOG_KEY)),1) > 0 ? CRCTD_LOAD_LOG_KEY : UPDTD_LOAD_LOG_KEY : UPDTD_LOAD_LOG_KEY

在不知道您不理解表达式的哪些部分的情况下,这个答案有点宽泛,但会告诉您每个部分的作用。然后由您将这些信息放在一起。

首先让我们看一下这个语法:

{Boolean Expression} ? {Scalar Value} : {Scalar Value}

这在 SSIS 中是一个内联 If。它等价于 T-SQL 中的 IIF (这是一个简短的 CASE 表达式)。简单来说,以下表达式具有可比性:

SomeValue > Another Value ? 1 : 0
IIF(SomeValue > AnotherValue, 1, 0)
CASE WHEN SomeValue > AnotherValue THEN 1 ELSE 0 END

在您的表达式中,您嵌套了内联 ifs,因此简而言之如下所示:

{Boolean Expression 1} ? {Boolean Expression 2} ? {Scalar Value When 1 and 2 are true} : {Scalar Value when 1 is true, 2 is false} : {Scalar Value when 1 is false}

如果有帮助,这里是一个添加了括号的版本,以帮助查看内联 ifs 的开始和结束位置:

({Boolean Expression 1} ? ({Boolean Expression 2} ? {Scalar Value When 1 and 2 are true} : {Scalar Value when 1 is true, 2 is false}) : {Scalar Value when 1 is false})

现在我们来看第二个布尔表达式:

FINDSTRING(@[User::LV_LoadLogKey],LTRIM(RTRIM((DT_WSTR,35)CRCTD_LOAD_LOG_KEY)),1) > 0 

这里有几个运算符。首先 (DT_WSTR,35) 将以下表达式(在本例中为 CRCTD_LOAD_LOG_KEY)转换为长度为 35 的 DT_WSTRDT_WSTR 等价于 T-[= 中的 nvarchar 55=]。所以这相当于 T-SQL.

中的 CONVERT(nvarchar(35),CRCTD_LOAD_LOG_KEY)CAST(CRCTD_LOAD_LOG_KEY AS nvarchar(35))

LTRIMRTRIM 与它们的 T-SQL 对应物做同样的事情;他们从字符串中删除前导和尾随的空白字符。

最后你有 FINDSTRING,相当于 T-SQL 中的 CHARINDEX。唯一的区别是前 2 个参数是相反的;第一个参数是要在 in 中搜索字符的字符串,第二个参数是要搜索 for 中的字符的字符串。第三个参数也是一样,出现次数。因此,对于 FINDSTRING 的简化版本,以下内容是等效的:

FINSTRING(@[User::LV_LoadLogKey],CRCTD_LOAD_LOG_KEY,1)
CHARINDEX(CRCTD_LOAD_LOG_KEY, @LV_LoadLogKey,1)