Copiar datos en otra tabla

154

¿Cómo copiar / agregar datos de una tabla a otra tabla con el mismo esquema en SQL Server?

Editar:

digamos que hay una consulta

select * 
into table1 
from table2 
where 1=1 

que crea table1con el mismo esquema y datos que en table2.

¿Hay alguna consulta breve como esta para copiar solo datos completos solo en una tabla ya existente?

Rajaram Shelar
fuente
¡Solo para obtener información completa, tenga cuidado de que estos comandos NO copien índices y disparadores de la tabla! Consulte la siguiente publicación para ver los índices de copia y la secuencia de comandos de activación: stackoverflow.com/questions/7582852/…
HausO
¿Cómo resolver esto? INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

Respuestas:

310

Si ambas tablas son realmente el mismo esquema:

INSERT INTO newTable
SELECT * FROM oldTable

De lo contrario, deberá especificar los nombres de las columnas (la lista de columnas para newTablees opcional si está especificando un valor para todas las columnas y seleccionando columnas en el mismo orden que newTableel esquema):

INSERT INTO newTable (col1, col2, col3)
SELECT column1, column2, column3
FROM oldTable
lc.
fuente
1
¿Qué pasa si quiero ingresar blank datapara alguna columna?
Hud
3
@coder es solo una cláusula select, por lo que puedes poner cualquier cosa que desees, incluidas NULLs explícitas , constantes de cadena, expresiones o incluso subconsultas.
lc.
por qué esto no funcionaINSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');
1
@AbdullahNurum Porque su consulta escalar está seleccionando más de una columna. Consulte stackoverflow.com/questions/4141370/… y stackoverflow.com/questions/6254913/…
lc.
1
Si ambas tablas presentan un esquema similar, pero hay una columna con 'Especificación de identidad' en SÍ, la instrucción SQL debe enumerar todas las columnas, excepto la que tiene Especificación de identidad.
Gabriel Marius Popescu
18

Esta es la forma correcta de hacerlo:

INSERT INTO destinationTable
SELECT * FROM sourceTable
Zzz
fuente
16

De manera simple si no existe una nueva tabla y desea hacer una copia de la tabla anterior con todo lo siguiente, funciona en SQL Server.

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

Prueba esto:

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

Prueba esto:

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

No es obligatorio que los nombres de columna sean iguales.

S.Adikaram
fuente
3

Insertar columna seleccionada con condición

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

Copie todos los datos de una tabla a otra con el mismo nombre de columna.

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

la primera consulta creará la estructura de table1a table2y la segunda consulta colocará los datos de table1atable2

Renote Gotecha
fuente