我必须在 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。它是IIF
T-SQL 中的等价物(这是一个简短的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}
如果有帮助,这里有一个添加括号的版本,以帮助查看内联 if 的开始和结束位置:
({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
)转换DT_WSTR
为长度为 35DT_WSTR
的 a。与nvarchar
T-SQL 中的等效。所以这与 T-SQLCONVERT(nvarchar(35),CRCTD_LOAD_LOG_KEY)
或CAST(CRCTD_LOAD_LOG_KEY AS nvarchar(35))
在 T-SQL 中是等效的。
LTRIM
并RTRIM
与他们的 T-SQL 同行做同样的事情;它们从字符串中删除前导和尾随空白字符。
最后你有FINDSTRING
,这CHARINDEX
在 T-SQL 中是等价的。唯一的区别是前2个参数颠倒了;第一个参数是要搜索的字符(或多个)的字符串中,并且所述第二参数中的字符(一个或多个)来搜索为。第三个参数相同,出现次数。因此,对于您FINDSTRING
的简化版本,以下内容是等效的:
FINSTRING(@[User::LV_LoadLogKey],CRCTD_LOAD_LOG_KEY,1)
CHARINDEX(CRCTD_LOAD_LOG_KEY, @LV_LoadLogKey,1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句