2009-11-06 12 views
5

Il s'agit d'une question sur les expressions SQL Server Integration Services (SSIS) (je suis assez nouveau pour cela).Comment écrire l'expression du commutateur/cas SSIS?

Je voudrais écrire une expression de commutateur/cas dans une transformation de colonne dérivée - fondamentalement la nouvelle colonne peut avoir 5 valeurs possibles différentes, basées sur la valeur d'une colonne d'entrée. Tout ce que j'ai obtenu de Google est la (condition)? (true value): (false value) technique, mais cela ne fournit que deux valeurs possibles. Les expressions SSIS ont-elles une expression de type switch/case? J'ai pensé à utiliser des transformations de colonnes dérivées séquentielles, ou créer une table de recherche temporaire, mais cela semble plus compliqué que ça ne devrait vraiment l'être.

Merci.

Répondre

13

J'ai utilisé l'équivalent d'une instruction if-elseif-else pour résoudre le problème, comme celui-ci:

(condition1)? (true value1): (condition2)? (true value2): (false value)

3

Même si, techniquement, la réponse d'avesse fonctionnera, écrire/maintenir l'expression n'est pas la tâche la plus intéressante. Pour éviter d'écrire des expressions complexes dans la transformation de colonne dérivée, je recommande d'utiliser une transformation Script. Cela vous permet d'utiliser le code .NET pour écrire une instruction switch, beaucoup plus agréable à écrire et à maintenir. Vos collègues vont l'apprécier!

+2

Je ne pense pas. Vous pouvez écrire et maintenir les expressions aussi complexes que vous le souhaitez, la condition, vous devriez le comprendre. Que faire si le développeur ETL est un débutant à C#? J'éviterais autant que possible les transformations de script. (Juste ma vue). – Aditya

+1

@Aditya Pour être honnête, je ne ferais pas confiance à un développeur ETL qui ne comprend pas les expressions logiques de base dans C#/VB.NET. Imaginez que le même développeur doit ajouter une sixième condition à la ..? ..: ..? ..: ..? ..: (et ainsi de suite) expression. Les chances sont élevées, ce qui entraîne un bug. Mais tout le monde a droit à sa propre opinion bien sûr! :) –

2

structurer simplement vos déclarations:? Comme empilés

@[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]