Đạo lý của câu chuyện sau đây là chỉ vì bạn có thể làm điều gì đó trong SSIS, không phải lúc nào cũng là một ý kiến hay.
Trong trường hợp cụ thể, truy vấn này. Sẽ hiệu quả hơn nhiều nếu sử dụng logic sql hiện có để tạo giá trị cuối cùng hơn là sử dụng các cột dẫn xuất hoặc tác vụ tập lệnh trong SSIS (chưa kể đến việc lãng phí bộ nhớ đường ống, CPU, v.v.)
Truy vấn nguồn
Tôi đã sử dụng phần sau làm truy vấn nguồn.
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
Tìm vị trí phần trăm
Xác định xem biểu tượng phần trăm có tồn tại trong cột hay không. Điều này tạo ra một cột có tên là PercentPosition
FINDSTRING(FixedARMRateReductionLimit, "%",1)
Kiểm tra văn bản tỷ lệ
Sẽ là đủ để thực hiện một phép so sánh đơn giản như biểu thức đầu tiên hiển thị nhưng tôi đang gặp vấn đề với nó. Tôi cho rằng đó là chuyển đổi / so sánh chuỗi vấn đề (xem Lưu ý đầu tiên). Thay vì cố gắng lấy giá trị boolean, tôi đã sử dụng chuỗi tìm kiếm để tạo vị trí thứ tự.
FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
Derive Output
Tận hưởng cách sử dụng kép của Toán tử bậc ba .
(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
Bạn có thể đã đơn giản hóa một số điều này trong một tác vụ tập lệnh nhưng tôi chỉ thực hiện logic trong nguồn.