With SSIS 2012 the Expression Task is a very useful addition.
It can replace some of the tedious little script tasks when all you want to do is to change the value of a variable.
However! Although the programming language of C# in scripts can look very similar to the expression language used in SSIS it can be misleading.
Today I needed a counter in a foreach loop container that needed to be incremented by one if an error was found in a preceding task. I created a variable of type int that was initiallly set to zero. Inside the container I added an Expression Task to increment my counter by 1.
There I made my mistake: being used to incrementing with C# I wrote the following (incorrect) statement:
@[User::Errorcounter] += 1
This statement will evaluate to a value of 1 when you click the ‘Eveluate Expression’ button. since my variable was initially set to zero, this looked OK to me.
However, the variable will always stay at value 1, it will never increment!
The correct increment statement is (in a VB-like or SQL-like form)
@[User::Errorcounter] = @[User::Errorcounter] + 1
This also evalutates to 1, but it will increment to 2, 3 and so on when the package is run.
By the way: this can easily be verified when you set the initial value of the variable Errorcounter to another value, e.g. 5. With the incorrect statement the expression will still evaluate to 1. With the correct statement the expression will evaluate to 6.