Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Repetição da Descrição do Código/ID

Bom dia,

Gostaria de saber qual item da caixa de ferramentas utilizar no SSIS, ou como fazer para que ao invés de repetir a Descrição das Informações no Código/ID através da função "Copiar Coluna", seja gerado uma chave única, ou seja gerado um número sequencial como código. Por exemplo: na tabela dimensão [Dim_Categoria] que tem 'Cod_Categoria' e 'Desc_Categoria' com a informação de "Águas Minerais", porém o Cod_Categoria deveria ser 001 ou outro número sequencial de acordo com a inserção do dado na tabela e a Descrição continuar "Águas Minerais".

1 resposta
solução!

Vou ilustrar com um exemplo.

Seja uma tabela original de empregados (EMPSOURCE) com os seguintes campos:

Matricula Varchar(10) Nome Varchar(50) Salario INT

Matricula: 0001 Nome: João Salario: 10000

Matricula: 0002 Nome: Pedro Salario: 15000

Matricula: 0003 Nome: Carla Salario: 20000

na tabela destino (EMPTARGET) temos a seguinte estrutura

ID INT Matricula Varchar(10) Nome Varchar(50) Salario INT

Queremos que o processo de ETL faça, ao transferir dados de EMPSOURCE para EMPTARGET:

ID: 1 Matricula: 0001 Nome: João Salario: 10000

ID: 2 Matricula: 0002 Nome: Pedro Salario: 15000

ID: 3 Matricula: 0003 Nome: Carla Salario: 20000

1) Crie uma caixa do tipo EXECUTE SQL TASK EDITOR com a sequinte consulta:

SELECT ISNULL(MAX(ID),0) FROM EMPTARGET

Propriedade ResultSet como single row.

E na aba ResultSet crie uma variável (ex: var_max_id) que é iniciada com 0. Assim esta variável sempre terá o número máximo de ID da tabela destini (EMPTARGET).

2) Ligado ao EXECUTE SQL TASK EDITOR inclua uma caixa DATA FLOW TASK. Dentro dela teremos a leitura dos dados da tabela origem, a execuçãod eum script e a gravação na tabela destino.

3) Dentro do DATA FLOW TASK, temso a leitura dos dados da tabela origem:

SELECT MATRICULA, NOME, SALARIO FROM EMPSOURCE.

4) Adicione um SCRIPT TRANSFORMATION EDITOR e, em Custom Properties, inclua a variável var_max_id.

5) Edite o script (Ele deve estar configurado para a criação de um script em C#) vá na procedure Input0_ProcessInputRow e inclua:

Row.RowNumber = this.Variables.varmaxid + i; i=i+1;

6) Antes da rotina você deve declarar a variável i:

int i = 1;

7) A proxima Task do tipo OLE DB Destination você deve selecionar a tabela EMPTARGET como destino e, no mapeamento, haverá uma nova coluna, na origem, chamada RowNumber que é o cálculo do MAX ID calculado pelo script.

Veja este passo a passo ilustrado em:

https://www.youtube.com/watch?time_continue=370&v=s-gvYjT9gG8

Att

Victorino.