use*_*594 -3 sql ssis sql-server-2008
CASE
WHEN CHARINDEX('%', '{FixedARMRateReductionLimit}') > 0 THEN
CAST(SUBSTRING('{FixedARMRateReductionLimit}', 0,
CHARINDEX('%', '{FixedARMRateReductionLimit}')) as decimal)/100
WHEN '{FixedARMRateReductionLimit}' = 'Weekly PMMS Rate' THEN
PARAM_VAL_TXT
ELSE
.02
END
Run Code Online (Sandbox Code Playgroud)
以下故事的寓意是,仅仅因为你可以在SSIS中做一些事情,这并不总是一个好主意.
例如,这个查询.使用现有的sql逻辑生成最终值比使用SSIS中的派生列或脚本任务(更不用说浪费管道内存,CPU等)要高效得多
我使用以下作为源查询.
SELECT '50%' AS FixedARMRateReductionLimit, .1 AS PARAM_VAL_TXT
UNION ALL SELECT 'Weekly PMMS Rate' AS FixedARMRateReductionLimit, .3 AS PARAM_VAL_TXT
UNION ALL SELECT 'Frack', .5
Run Code Online (Sandbox Code Playgroud)
确定列中是否存在百分比符号.这会创建一个名为的列PercentPosition
FINDSTRING(FixedARMRateReductionLimit, "%",1)
Run Code Online (Sandbox Code Playgroud)
如第一个表达式所示,进行简单的比较就足够了,但我遇到了问题.我认为这是一个字符串转换/比较问题(参见第一个注释).我使用findstring来生成序数位置,而不是通过获取布尔值.
FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
Run Code Online (Sandbox Code Playgroud)
享受三元运营商的双重用途.
(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
Run Code Online (Sandbox Code Playgroud)
您可以在脚本任务中简化其中一些,但我只是在源代码中执行逻辑.
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |