निम्नलिखित कहानी का नैतिक यह है कि सिर्फ इसलिए कि आप कर सकते हैं SSIS में कुछ करें, यह हमेशा एक अच्छा विचार नहीं होता है।
मामले में, यह प्रश्न। एसएसआईएस में व्युत्पन्न कॉलम या स्क्रिप्ट कार्य का उपयोग करने से अंतिम मूल्य उत्पन्न करने के लिए मौजूदा एसक्यूएल तर्क का उपयोग करना कहीं अधिक कुशल होगा (पाइपलाइन मेमोरी, सीपीयू, आदि के अपशिष्ट का उल्लेख नहीं करना)
स्रोत क्वेरी
मैंने निम्नलिखित का उपयोग स्रोत क्वेरी के रूप में किया है।
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)
दर टेक्स्ट की जांच करें
यह एक साधारण तुलना करने के लिए पर्याप्त होना चाहिए जैसा कि पहली अभिव्यक्ति से पता चलता है लेकिन मुझे इसके साथ समस्या हो रही थी। मुझे लगता है कि यह एक स्ट्रिंग रूपांतरण/तुलना है। मुद्दा (पहले नोट देखें)। बूलियन मान प्राप्त करने के बजाय, मैंने क्रमिक स्थिति उत्पन्न करने के लिए फाइंडस्ट्रिंग का उपयोग किया।
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
आप इसमें से कुछ को एक स्क्रिप्ट कार्य में सरल बना सकते थे लेकिन मैं सिर्फ स्रोत में तर्क करूँगा।