Die Moral der folgenden Geschichte lautet:Nur weil du kannst etwas in SSIS tun, das ist nicht immer eine gute Idee.
Ein typisches Beispiel ist diese Abfrage. Es wäre weitaus effizienter, die vorhandene SQL-Logik zu verwenden, um den endgültigen Wert zu generieren, als abgeleitete Spalten oder eine Skriptaufgabe in SSIS zu verwenden (ganz zu schweigen von der Verschwendung von Pipeline-Speicher, CPU usw.)
Quellabfrage
Ich habe Folgendes als Quellabfrage verwendet.
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
Prozentposition finden
Stellen Sie fest, ob in der Spalte ein Prozentzeichen vorhanden ist. Dadurch wird eine Spalte namens PercentPosition
erstellt
FINDSTRING(FixedARMRateReductionLimit, "%",1)
Auf Preistext prüfen
Es sollte ausreichen, einen einfachen Vergleich durchzuführen, wie der erste Ausdruck zeigt, aber ich hatte Probleme damit. Ich nehme an, es ist eine String-Konvertierung/-Vergleich Ausgabe (siehe erste Anmerkung). Anstatt mich mit dem Abrufen eines booleschen Werts herumzuschlagen, habe ich findstring verwendet, um die Ordnungsposition zu generieren.
FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
Ausgabe ableiten
Genießen Sie die doppelte Nutzung des ternären Operators .
(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
Sie hätten einiges davon in einer Skriptaufgabe vereinfachen können, aber ich würde einfach die Logik in der Quelle übernehmen.