次の話の教訓は、あなたができるという理由だけで
適切な例として、このクエリがあります。 SSIS で派生列やスクリプト タスクを使用するよりも、既存の SQL ロジックを使用して最終値を生成する方がはるかに効率的です (パイプライン メモリ、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
パーセント ポジションを見つける
パーセント記号が列に存在するかどうかを判断します。これにより、PercentPosition
という列が作成されます
FINDSTRING(FixedARMRateReductionLimit, "%",1)
料金テキストを確認
最初の式が示すように単純な比較を行うだけで十分なはずですが、問題がありました。 文字列変換/比較 だと思います 問題 (最初の注を参照)。ブール値を取得するのではなく、findstring を使用して序数の位置を生成しました。
FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
派生出力
三項演算子 の二重使用をお楽しみください .
(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
スクリプト タスクでこれの一部を簡略化することもできますが、ソースでロジックを実行するだけです。