Uma questão interessante que destaquei em um dos vídeos é a variável do tipo Decimal, que não existia na interface do SSIS 2008 e está presente no SSIS 2012. Utilizando como base os testes que realizei, a não definição correta das características dessa variável pode trazer efeitos colaterais indesejados para seus pacotes.
Vou descrever alguns testes para que você possa simular no seu ambiente:
1. Adicionar uma variável do tipo Double chamada vDouble (criativo, não?) ao pacote.
2. Adicionar uma expression task com a seguinte expressão: @[User::vDouble] = 43 / 3
a. Analisando o valor da variável após a expressão: 14
b. Para termos um valor inteiro como resultado da divisão é porque estamos tratando dois inteiros como divisor e dividendo, então pela precedência dos tipos o resultado também é um valor inteiro.
3. Alterar a expression task com a seguinte expressão: @[User::vDouble] = ((DT_DECIMAL, 4) 43) / 3
a. Notem que estou fazendo a conversão do número 43 para DECIMAL com escala 4. No SSIS o tipo decimal possui precisão 29, diferente do tipo DT_NUMERIC (usando no pipeline) onde você pode definir até 38 como precisão.
b. Analisando o valor da variável após a expressão: 14.3333333333
c. Agora sim, o valor resultante possui casa decimal pelo tipo resultado ser um decimal e a variável um ponto flutuante.
4. Adicionar uma variável do tipo Decimal chamada vDecimal ao pacote.
5. Adicionar uma expression task com a seguinte expressão: @[User:: vDecimal] = 43 / 3
a. Analisando o valor da variável após a expressão: 14
b. Para termos um valor inteiro como resultado da divisão é porque estamos tratando dois inteiros como divisor e dividendo, então pela precedência dos tipos o resultado também é um valor inteiro.
6. Alterar a expression task com a seguinte expressão: @[User:: vDecimal] = ((DT_DECIMAL, 4) 43) / 3
a. Notem que estou fazendo a conversão do número 43 para DECIMAL com escala 4. No SSIS o tipo decimal possui precisão 29, diferente do tipo DT_NUMERIC (usando no pipeline) onde você pode definir até 38 como precisão.
b. Analisando o valor da variável após a expressão: 14
c. É aqui que o está o pequeno detalhe, o valor default para a variável decimal é 0, então o SSIS infere o tipo DECIMAL(29, 0). Então por padrão você NÃO vai ver casas decimais para a sua variável!
7. Alterar o valor default da variável vDecimal para 0.01
a. Analisando o valor da variável após a expressão que faz o cast, temos: 14.33
b. Como você definiu o valor default para a variável como 0.01, então o SSIS infere o tipo DECIMAL(29, 2).
8. Alterar o valor default da variável vDecimal para 0.0001
a. Analisando o valor da variável após a expressão que faz o cast, temos: 14.3333
b. Como você definiu o valor default para a variável como 0.0001, então o SSIS infere o tipo DECIMAL(29, 4).
9. Alterar o valor default da variável vDecimal para 0.0000
a. Analisando o valor da variável após a expressão que faz o cast, temos: 14
b. Como você definiu o valor default para a variável como 0.0000, então o SSIS considerou o valor zero e infere o tipo DECIMAL(29, 0).
Isto é, se você quiser um decimal de 4 casas após a virgula e que no início do pacote o valor seja zero, você precisa definir o valor inicial como 0.0001 e no início do pacote alterar o valor para zero. Bem chato esse detalhe.
Eu revisei os novos livros do SSIS 2012 e nenhum parece tratar esse assunto, então resolvi colocar aqui para que seja validado com todos vocês (qualquer ponto que passou despercebido me avise!). Espero que você tenha cuidado e não introduza efeitos colaterais indesejados no seu pacote ao utilizar variáveis do tipo Decimal.
Abraços