Moralen i följande berättelse är att bara för att du kan gör något i SSIS, det är inte alltid en bra idé.
Ett exempel, denna fråga. Det skulle vara mycket mer effektivt att använda den befintliga sql-logiken för att generera det slutliga värdet än att använda härledda kolumner eller en skriptuppgift i SSIS (för att inte tala om slöseri med pipelineminne, CPU, etc)
Källfråga
Jag använde följande som en källfråga.
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
Hitta procentposition
Bestäm om det finns en procentsymbol i kolumnen. Detta skapar en kolumn som heter PercentPosition
FINDSTRING(FixedARMRateReductionLimit, "%",1)
Sök efter betygstext
Det borde vara tillräckligt att göra en enkel jämförelse som det första uttrycket visar, men jag hade problem med det. Jag antar att det är en strängkonvertering/jämförelse problem (se första anmärkningen). Istället för att pyssla med att få ett booleskt värde använde jag findstring för att generera ordningspositionen.
FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
Hämta utdata
Njut av dubbel användning av Ternary operator .
(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
Du kunde ha förenklat en del av detta i en skriptuppgift men jag skulle bara göra logiken i källan.