Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразувайте CASE израз в SQL в извлечена колона в SSIS

Моралът на следната история е, че просто защото можете направи нещо в SSIS, не винаги е добра идея.

Пример за това е тази заявка. Би било много по-ефективно да се използва съществуващата sql логика за генериране на крайната стойност, отколкото да се използват извлечени колони или скриптова задача в SSIS (да не говорим за загубата на конвейерна памет, CPU и т.н.)

Изходна заявка

Използвах следното като източник на заявка.

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)

Проверете за текст за оценка

Трябва да е достатъчно да се направи просто сравнение, както показва първият израз, но имах проблеми с него. Предполагам, че това е преобразуване/сравнение на низ проблем (вижте първата бележка). Вместо да се занимавам с получаване на булева стойност, използвах findstring за генериране на поредната позиция.

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

Бихте могли да опростите част от това в скриптова задача, но аз просто бих използвал логиката в източника.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Импортиране на низова дата в извлечена колона

  2. Срокове за събиране на аларми от Spotlight Cloud

  3. SSMS резултати към мрежа - CRLF не се запазва при копиране/поставяне - има ли по-добри техники?

  4. SQL Server:DELETE срещу TRUNCATE

  5. Обединяването на връзки е по-бавно от поддържането на една отворена връзка