Microsoft SQL Server
Mueve y copia datos alrededor de tablas
Buscar..
Copia datos de una tabla a otra
Este código selecciona los datos de una tabla y los muestra en la herramienta de consulta (generalmente SSMS)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Este código inserta esos datos en una tabla:
INSERT INTO MyTargetTable (Column1, Column2, Column3)
SELECT Column1, Column2, Column3 FROM MySourceTable;
Copia datos en una tabla, creando esa tabla sobre la marcha
Este código selecciona los datos de una tabla:
SELECT Column1, Column2, Column3 FROM MySourceTable;
Este código crea una nueva tabla llamada MyNewTable
y coloca esos datos en ella.
SELECT Column1, Column2, Column3
INTO MyNewTable
FROM MySourceTable;
Mover datos a una tabla (asumiendo el método de claves únicas)
Para mover los datos, primero insértelos en el destino y luego elimine lo que haya insertado de la tabla de origen. Esta no es una operación SQL normal pero puede ser esclarecedor
¿Qué insertaste? Normalmente, en las bases de datos debe tener una o más columnas que pueda usar para identificar de forma única las filas, por lo que supondremos eso y las utilizaremos.
Esta declaración selecciona algunas filas
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Primero insertamos estos en nuestra tabla de objetivos:
INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
Ahora, asumiendo que los registros en ambas tablas son únicos en Key1
, Key2
, podemos usar eso para encontrar y eliminar datos de la tabla de origen
DELETE MyTable
WHERE EXISTS (
SELECT * FROM TargetTable
WHERE TargetTable.Key1 = SourceTable.Key1
AND TargetTable.Key2 = SourceTable.Key2
);
Esto solo funcionará correctamente si Key1
, Key2
son únicas en ambas tablas
Por último, no queremos que el trabajo esté hecho a medias. Si envolvemos esto en una transacción, todos los datos se moverán o no sucederá nada. Esto garantiza que no insertemos los datos y luego no podamos eliminarlos de la fuente.
BEGIN TRAN;
INSERT INTO TargetTable (Key1, Key2, Column3, Column4)
SELECT Key1, Key2, Column3, Column4 FROM MyTable;
DELETE MyTable
WHERE EXISTS (
SELECT * FROM TargetTable
WHERE TargetTable.Key1 = SourceTable.Key1
AND TargetTable.Key2 = SourceTable.Key2
);
COMMIT TRAN;