2009-11-06 15 views
5

To jest pytanie dotyczące wyrażeń SQL Server Integration Services (SSIS) (jestem całkiem nowy).Jak napisać przełącznik SSIS switch/case?

Chciałbym zapisać wyrażenie przełączania/case w transformacji kolumny pochodnej - zasadniczo nowa kolumna może mieć 5 różnych możliwych wartości, w oparciu o wartość kolumny wejściowej. Wszystko co dostałem od Google to (warunek)? (true value): (false value) technika, ale to zapewnia tylko dwie możliwe wartości. Czy wyrażenia SSIS mają wyrażenie typu switch/case?

Pomyślałem o użyciu sekwencyjnych przekształceń pochodnych kolumn lub tworzenia tymczasowego tabeli odnośników, ale to wydaje się być bardziej skomplikowane niż powinno.

Dzięki.

Odpowiedz

13

Użyłem odpowiednik if-elseif-else, aby rozwiązać problem w następujący sposób:

(condition1)? (true value1): (condition2)? (true value2): (wartość false)

3

Mimo że technicznie odpowiedź od avesse zadziała, pisanie/utrzymanie ekspresji nie jest najciekawszym zadaniem.

Aby uniknąć pisania złożonych wyrażeń w transformacji kolumny pochodnej, zaleca się użycie transformacji skryptów. Dzięki temu możesz użyć kodu .NET do napisania instrukcji switch, o wiele ładniejszej w pisaniu i utrzymaniu. Twoi koledzy to docenią!

+2

Nie sądzę. Możesz pisać i utrzymywać wyrażenia tak złożone, jak chcesz, stan, powinieneś to zrozumieć. Co jeśli programista ETL jest nowicjuszem w C#? Unikałbym w jak największym stopniu transformacji skryptów. (Tylko mój widok). – Aditya

+1

@Aditya Szczerze mówiąc nie ufałbym programistce ETL, który nie rozumie podstawowych wyrażeń logicznych w C#/VB.NET. Wyobraź sobie, że ten sam programista musi dodać szósty warunek do ..? ..: ..? ..: ..? ..: (i tak dalej) wyrażenie. Szanse są wysokie, co powoduje błąd. Ale każdy ma oczywiście prawo do własnej opinii! :) –

2

Wystarczy zorganizować swoje wypowiedzi jak: ułożone

@[User::SomeVariable] == 2 ? "SomeVariable is 2" 
: 
@[User::SomeVariable] == 3 ? "SomeVariable is 3" 
: 
@[User::SomeVariable] == 4 ? "SomeVariable is 4" 
: 
"SomeVariable is not 2,3,4 is actually" + @[User::SomeVariable]