Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Konwertuj wyrażenie CASE w SQL na kolumnę pochodną w SSIS

Morał z poniższej historii jest taki, że tylko dlatego, że możesz zrobić coś w SSIS, nie zawsze jest to dobry pomysł.

Przykładem jest to zapytanie. O wiele bardziej wydajne byłoby użycie istniejącej logiki sql do wygenerowania końcowej wartości niż użycie kolumn pochodnych lub zadania skryptu w SSIS (nie wspominając o marnowaniu pamięci potoku, procesora itp.)

Zapytanie źródłowe

Użyłem następującego jako zapytania źródłowego.

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

Znajdź pozycję procentową

Określ, czy w kolumnie istnieje symbol procentowy. Tworzy to kolumnę o nazwie PercentPosition

FINDSTRING(FixedARMRateReductionLimit, "%",1)

Sprawdź tekst oceny

Powinno wystarczyć proste porównanie, jak pokazuje pierwsze wyrażenie, ale miałem z tym problemy. Zakładam, że jest to konwersja/porównanie ciągu problem (patrz pierwsza uwaga). Zamiast bawić się z uzyskaniem wartości logicznej, użyłem findstring do wygenerowania pozycji porządkowej.

FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)

Wyprowadź dane wyjściowe

Ciesz się podwójnym użyciem operatorem trójargumentowym .

(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100

Mógłbyś trochę uprościć w zadaniu skryptu, ale ja po prostu zrobię logikę w źródle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw „Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych int” w SQL Server

  2. Zaktualizuj tabelę SQL Server o dane lokalne

  3. Jak wyłączyć CDC w zestawie tabel LUB wyłączyć we wszystkich tabelach w bazie danych w programie SQL Server — samouczek dotyczący programu SQL Server

  4. Jak skopiować tabele unikając kursorów w SQL?

  5. Python nie może znaleźć sterownika ODBC na Heroku po ustawieniu wszystkiego