Moral dari cerita berikut adalah bahwa hanya karena Anda bisa melakukan sesuatu di SSIS, itu tidak selalu merupakan ide yang baik.
Contoh kasus, kueri ini. Akan jauh lebih efisien untuk menggunakan logika sql yang ada untuk menghasilkan nilai akhir daripada menggunakan kolom turunan atau tugas skrip di SSIS (belum lagi pemborosan memori pipa, CPU, dll)
Kueri sumber
Saya menggunakan yang berikut ini sebagai kueri sumber.
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
Temukan Persen Posisi
Tentukan apakah simbol persentase ada di kolom. Ini membuat kolom bernama PercentPosition
FINDSTRING(FixedARMRateReductionLimit, "%",1)
Periksa teks tarif
Seharusnya cukup untuk melakukan perbandingan sederhana seperti yang ditunjukkan ekspresi pertama tetapi saya mengalami masalah dengannya. Saya menganggap ini adalah konversi/perbandingan string masalah (lihat Catatan pertama). Daripada berkutat dengan mendapatkan nilai boolean, saya menggunakan findstring untuk menghasilkan posisi ordinal.
FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
Turunkan Keluaran
Nikmati penggunaan ganda operator Ternary .
(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
Anda dapat menyederhanakan sebagian dari ini dalam tugas skrip, tetapi saya hanya akan melakukan logika di sumbernya.