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.