Como inserir registros de uma tabela dentro de outra quando esta tem uma chave primária com autoincremento?

Blog Advpl - Share knowledge

Como inserir registros de uma tabela dentro de outra quando esta tem uma chave primária com autoincremento?

A necessidade aqui é de incluir numa determinada tabela com um select de outra, mas não se esquecendo de tratar o R_E_C_N_O_, para evitar que ocorrar erro de duplicidade.

Ambiente: MSSQL, ORACLE

Lembrando que quando inserimos registro de uma tabela em outros os campos a serem inseridos devem ser iguais.

Exemplo:

Tabela 1
Campo1 int auto_increment
Campo2 Varchar(10)
Campo3 Decimal(9,2)
Campo4 Varchar(30)

Tabela 2
Campo1 int auto_increment
Campo2 Varchar(10)
Campo3 Decimal(9,2)
Campo4 Varchar(40)

Usando um INSERT com SELECT, as duas tabelas devem está identicas, para inserir, terá que informar apenas os campos que são iguais.

Errado:
INSERT INTO TABELA1 SELECT * FROM TABELA2

Certo:
INSERT INTO TABELA1 (TABELA1.CAMPO1,TABELA1.CAMPO2,TABELA1.CAMPO3) SELECT (TABELA2.CAMPO1,TABELA2.CAMPO2,TABELA2.CAMPO3) FROM TABELA2

Agora, como inserir os registros da tabela 2 na tabela 1, se o Campo 1 da tabela 1 é autoincrementável e na tabela 2, o campo 1 pode ter o mesmo sequencial, e considerando que a chave é apenas o campo auto-incrementável.

Simples assim.

Na prática, considerando que os registros a serem inclusos não existem, para não ocorrer erro de chave duplicada.

Iremos usar os campos que são identicos

A função ROW_NUMBER(), retorna o número sequencial de uma linha dentro de uma partição de um conjunto de resultados, a partir de 1 para a primeira linha em cada partição.

A vantagem da sintaxe acima é não precisar criar uma tabela temporária.