2008-09-11 21 views

Respuesta

92

Mientras no hay columnas de identidad puede simplemente

INSERT Table2 
SELECT * FROM Table1 
WHERE [Conditions] 
+19

Tenga cuidado con esta sintaxis, ya que no funcionará si Table2 tiene una columna de identidad y se romperá en el futuro si Table1 cambia alguna vez sin que Table2 cambie en sincronización (me quemó antes). Esta solución puede ser perfecta para su caso, solo tenga en cuenta estas consideraciones. –

+8

Puede usar 'SET IDENTITY_INSERT < table > ON' (y' SET IDENTITY_INSERT < table > OFF') para deshabilitar temporalmente la columna de identidad en la tabla en la que está intentando insertar. Trabajé para mí tratando de restaurar algunos registros faltantes en el medio del conjunto de datos. – nickb

+1

¿qué ocurre si la clave principal en la tabla 1 existe en la tabla 2 como clave externa? Tengo la misma cosa, y no sé qué hacer ... en table2 id the foreign-key AS "Technology_idTechnology" y en la tabla 1, está allí como "idTechnology" Quiero copiar todas las entradas de table1 a table2, cuando la idTechnology coincide en ambas tablas ... – ZelelB

5
SELECT * INTO <new_table> FROM <existing_table> WHERE <clause> 
+1

¿Hay alguna manera de hacer esto Si estas dos tablas están en las bases de datos SQL-diff en el servidor. – Naresh

+9

¡Claro! Califica completamente la base de datos. [nombre del servidor]. [esquema]. [tabla]. Por ejemplo 'SELECT * INTO [SQLTEST]. [Dbo]. [EMPLOYEES] FROM [SQLPROD]. [Dbo]. [EMPLOYEES]' –

+3

Esto crea una nueva tabla, que no es lo que el OP está pidiendo. – Conrad

62

sintaxis alternativa:

INSERT tbl (Col1, Col2, ..., ColN) 
    SELECT Col1, Col2, ..., ColN 
    FROM Tbl2 
    WHERE ... 

La consulta de selección puede (por supuesto) incluir expresiones, declaraciones de casos, constantes/literales, etc.

+1

Esto es genial cuando las tablas difieren ligeramente. Tengo algunas columnas adicionales en mi segunda tabla y la respuesta aceptada no funciona con MSSQL, ya que deben ser idénticas. –

5
INSERT INTO DestTable 
SELECT * FROM SourceTable 
WHERE ... 

funciona en SQL Server

+2

Esto funciona solo cuando DestTable no existe. Obtendrá un error si se crea DestTable antes de esta consulta. –

+1

En realidad falla si la tabla de destino no existe. Puede causar errores si el DestTable existente no está vacío. – Kaniu

33

La respuesta de Jarrett crea una nueva tabla.

La respuesta de Scott se inserta en una tabla existente con la misma estructura.

También puede insertar en una tabla con diferente estructura:

INSERT Table2 
(columnX, columnY) 
SELECT column1, column2 FROM Table1 
WHERE [Conditions] 
+6

@ScottStonehouse: si reúne todas las otras respuestas en esta respuesta como lo ha hecho pero con el código (por lo que es exhaustivo), definitivamente se convertiría en la mejor respuesta. –

Cuestiones relacionadas