Copiar dados para outra tabela

154

Como copiar / acrescentar dados de uma tabela para outra tabela com o mesmo esquema no SQL Server?

Editar:

digamos que há uma consulta

select * 
into table1 
from table2 
where 1=1 

que cria table1com o mesmo esquema e com os dados que estão em table2.

Existe alguma consulta curta como esta para copiar apenas dados inteiros apenas em uma tabela já existente?

Rajaram Shelar
fonte
Apenas para obter informações completas, tome cuidado para que estes comandos NÃO copiem índices e gatilhos da tabela! Veja post seguinte para índices de cópia e gatilhos script: stackoverflow.com/questions/7582852/...
HausO
Como resolver isso? INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

Respostas:

310

Se as duas tabelas forem realmente o mesmo esquema:

INSERT INTO newTable
SELECT * FROM oldTable

Caso contrário, será necessário especificar os nomes das colunas (a lista de colunas newTableé opcional se você estiver especificando um valor para todas as colunas e selecionando colunas na mesma ordem que newTableo esquema):

INSERT INTO newTable (col1, col2, col3)
SELECT column1, column2, column3
FROM oldTable
lc.
fonte
1
e se eu quiser entrar blank dataem alguma coluna ??
hud
3
@coder é apenas uma cláusula select, então você pode colocar o que quiser, incluindo NULLs explícitos , constantes de string, expressões ou até subconsultas.
lc.
por que isso não funciona #INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');
1
@AbdullahNurum Porque sua consulta escalar está selecionando mais de uma coluna. Consulte stackoverflow.com/questions/4141370/… e stackoverflow.com/questions/6254913/…
lc.
1
Se as duas tabelas apresentarem esquema semelhante, mas houver uma coluna com 'Especificação de Identidade' em YES, a instrução SQL precisará enumerar todas as colunas, exceto aquela com Especificação de Identidade.
Gabriel Marius Popescu
18

Esta é a maneira correta de fazer isso:

INSERT INTO destinationTable
SELECT * FROM sourceTable
Zzz
fonte
16

Maneira simples, se a nova tabela não existir e você desejar fazer uma cópia da tabela antiga com tudo o que segue, funciona no SQL Server.

SELECT * INTO NewTable FROM OldTable
Satish Patel
fonte
11
INSERT INTO table1 (col1, col2, col3)
SELECT column1, column2, column3
FROM table2                                        
user3566871
fonte
9

Tente o seguinte:

INSERT INTO MyTable1 (Col1, Col2, Col4)
   SELECT Col1, Col2, Col3 FROM MyTable2
Abe Miessler
fonte
6

Tente o seguinte:

Insert Into table2
Select * from table1
Kapil Khandelwal
fonte
4
INSERT INTO DestinationTable(SupplierName, Country)
SELECT SupplierName, Country FROM SourceTable;

Não é obrigatório que os nomes das colunas sejam iguais.

S.Adikaram
fonte
3

Inserir coluna selecionada com condição

INSERT INTO where_to_insert (col_1,col_2) SELECT col1, col2 FROM from_table WHERE condition;

Copie todos os dados de uma tabela para outra com o mesmo nome de coluna.

INSERT INTO where_to_insert 
SELECT * FROM from_table WHERE condition;
Nimmi Verma
fonte
0
CREATE TABLE `table2` LIKE `table1`;
INSERT INTO `table2` SELECT * FROM `table1`;

a primeira consulta criará a estrutura de table1para table2e a segunda consulta colocará os dados de table1paratable2

Renish Gotecha
fonte