Carregando agora
×

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

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.

Deixe uma resposta