SQL Server – Insertar Datos a una tabla desde otra. INSERT INTO SELECT FROM TABLE, SELECT INTO FROM TABLE

12 04 2011

Existen dos formas de insertar datos de una tabla a otra, la primera es creando la estructura de la tabla destino y luego haciendo un INSERT INTO SELECT FROM TABLE o creando al vuelo la tabla e insertando los datos en la misma instruccion.

El Primero Modo es como se describe a continuación:

--Crear Tabla Destino
CREATE TABLE TablaDest (Col1 VARCHAR(100), Col2 VARCHAR(100))
--INSERT INTO TablaDest usando SELECT
INSERT INTO TablaDest (Col1, Col2)
SELECT Col1, Col2
FROM TablaFuente
WHERE --<Condicion>

La segunda forma de hacerlo es así:

--Crear una nueva tabla al tiempo que seleccionamos los datos desde la tabla fuente
SELECT Col1, Col2
INTO TablaDest
FROM TablaFuente
WHERE --<Condicion>

Ambos modos funcionan también con tablas temporales.

1Saludo


Acciones

Information

34 responses

12 06 2012
kirdoo

INSERT INTO “tabla1” (“columna1”, “columna2”, …)
SELECT “columna3”, “columna4”, …
FROM “tabla2”

25 06 2012
loca121

excelente opcion!!!!!

19 11 2012
william

uyyyy parce gracias a DIOS usted nacio y estudio sobre esto y nos pudo ayudar gracias….

30 11 2012
Magui

Hola! la opción “INSERT INTO Tabla (Col1, Col2, .. )
SELECT Col1, Col2, ..
FROM TablaAux”
es más óptima que la otra opción (SELECT INTO..)

6 05 2013
Stuart

Si no eh creado la TablaDest Puedo
agregarle datos ..
como en la segunda Imagen

17 05 2013
Blogger

Te la crea con la estructura que la sentencia select que te devuelve los datos

17 06 2013
LUCERO CORTES

no he podido continuar con mi tarea de sql por que cuando quiero introducir los datos a esta tabla genera un error ¡objeto no identificado! por fa quien tenga la respuesta le quedo agradecida
lo he hecho asi:
use taxi
go
insert into cliente
y me genera el error debajo de cliente
LULU16

24 06 2013
Blogger

igual y no has creado la tabla cliente!

31 10 2013
Jibran

Funcionaria si por ejemplo la tabala destino tiene un campo extra???
insert into TablaDestino (campo1,campo2, campo3)values((select campo1, campo2 from TablaOrigen where “Condicion”), “Valor campo 3”)

???

1 11 2013
Blogger

Usa el primer método, la columna extra de la tabla destino debe aceptar nulos o tener un default de otro modo falla la inserción,
Tu consulta no se podria ejecutar debiera ser algo como:

insert into TablaDestino (campo1,campo2)
select campo1, campo2
from TablaOrigen
where “Condicion”

o

insert into TablaDestino (campo1,campo2, campo3)
select campo1, campo2, ” AS campo3
from TablaOrigen
where “Condicion”

15 11 2013
rafa

Puedo usar este metodo para realizar mi consulta?

15 11 2013
rafa

Si la tabla ya esta creada lo que pretendo hacer es guardar un respaldo de informacion que se pueda ver pero no quiero eliminar las tablas y me dice
comando:
select * into trailer_copia2 from list
error:
Msg 2714, Level 16, State 6, Line 1
Ya hay un objeto con el nombre ‘trailer_copia2’ en la base de datos.

21 11 2013
Blogger

El mensaje mismo te indica el error, para el segunda forma, la tabla se crea “al vuelo” [no debe existir o habrá conflicto].
Si ya esta creada, entonces se usa la primera forma o bien borrarlo primero y usar la segunda forma.

10 03 2014
alice

este error me sale
Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table ‘Estados’ when IDENTITY_INSERT is set to OFF.

11 03 2014
Blogger

Los errores “level 16” corresponden al usuario resolverlos, y como dice tu mensaje es un error de insercion al violar las restricciones de la tabla, que al parecer quieres insertar un valor en una columna de tipo identity/autonumerico y el numero que quieres insertar ya esta en la base de datos, o bien tienes duplicados en tu select y quieres insertar en un identity, debieras revisar que no traiga duplicados o en caso extremo (que no considero debas llegar hasta aqui) deshabilitar las restriccion sobre esa columna, pero corres el riesgo de introducir duplicados en esa columna.

24 06 2014
martha

Y SI TENGO MAS DE UNA TABLA COMO SE PODRIA REALIZAR

8 07 2014
Blogger

Si quieres unir los datos de dos o mas tablas/fuentes antes de insertarlos puedes usar la instruccion UNION [ALL] para obtener los datos, o bien hacer un [LEFT/RIGTH/INNER] JOIN si las tablas tienen forma de unirse, los insertas usando la primera forma que menciono.

4 10 2014
ahc

Hola, una pregunta, como puedo hacer teniendo 2 bd una en firebird y otra en mysql, ambas con casi las mismas columnas solo varian en cantidad mas no en propiedades, y con el mismo nombre de tablas, y lo que deseo es pasar los registros de una tabla a la bd firebird a la tabla vacia en mysql, intente usando php, creando un archivo de conexiones y añadiendolo en otro php en donde pongo un query con ” INSERT INTO bd1.tablax (campo1, campo2) SELECT campo1, campo2 FROM bd2.tablay ” el problema es que no me marca ningun error , pero tampoco hace lo que pido simplemente no hace nada… , podrian aclararme una forma mejor???, gracias y saludos.

21 10 2014
Blogger

Si lo haces con php, puedes crear un ciclo que recorra la tabla en cuestion e inserte los valores en la nueva base de datos.

algo asi como estraes un tanto lo pones en un array y lo insertas como insert into table values();

tambien puedes usar SSIS para hacer el pase de datos de una fuente a otra.

29 12 2014
Angel Ucan

Gracias bro fue de mucha ayuda, saludos desde Mérida, Yucatán

12 05 2015
guillermo sanchez maya

hola buenos dias como le hago para que me inserte esos datos de otra tabla pero donde una columna de ambas tablas sean igual si no es igual que no lo inserte
espero su ayuda gracias

9 06 2015
Blogger

Investiga la instrucción merge o bien haciendolo a mano, usando un where/exist, lo que aplique

24 06 2015
fabian

hola buenos dias como le hago para que me inserte esos datos de una columna a otra columna de una misma tabla es decir que colunma 1 = colunma 2 de la tabla 1

12 07 2015
Blogger

esa es sencilla, obten en el select la consulta que ocupas, y cuando lo insertes en la columna 2, vuelves a poner la misma columna 1

29 06 2015
Cesar Viveros

necesito que el select me de la lista de mis 30 empleados y con el insert llenarlos con datos de otra tabla donde concidan los nombres pero me deje en blanco en los que no coincide se podra??

12 07 2015
Blogger

Hazlo por partes, investiga sobre subconsultas o bien el resultado de las consultas las pones en tablas temporales y haces los joins adecuados.

Primero debes obtener en el select el resultado que buscas, usa left joins (en la wikipedia encuentras los ejemplos)

12 10 2015
jose avrela

buenas amigo espero puedas ayudarme. tengo 3 tablas una de ficha ( informacion de las empresas ) otra conceptos ( conceptos de duedas con su valor) la tercera es deudaEmpresa ( tiene datos de la ficha y datos de deuda) mi problema es que no todas las enmpresas tienen la misma deda cada una tien sus deudas pero hay deudas en comun . ejem deuda de mantenimiento mes de octubre 200 , lo que necesito es llenar la tercera tabla con los datos de la primera y los datos de la segunda . no se si me explique GRACIAS de antemano

20 10 2015
Blogger

Investiga, las clausulas, join (inner, left rigth) en la wikipedia tienes un buen material

23 10 2015
Adrian Roelas

buenas, espero me puedan ayudar, tengo 2 tablas tabla1 y tabla2 quiero insertar los datos de tabla1 a tabla2 y ya lo hice x medio de este proceso

CREATE OR REPLACE PROCEDURE P_REPLICA_TABLA( PV_TABLA IN VARCHAR2,
PV_TABLA_2 IN VARCHAR2,
PV_MENSAJEERROR OUT VARCHAR2) IS

LV_QUERY VARCHAR2(32000);

begin

LV_QUERY:=’ INSERT INTO ‘||PV_TABLA||’ SELECT * FROM ‘|| PV_TABLA_2 ||” ;

EXECUTE IMMEDIATE LV_QUERY;
COMMIT;

–END LOOP;

EXCEPTION
WHEN OTHERS THEN
PV_MENSAJEERROR := ‘ERROR REPLICA TABLA ‘ ||
SQLCODE || ‘-‘ || SQLERRM;

end P_REPLICA_TABLA;

pero en la tabla1 luego de algun tiempo se llenara con mas datos y quisiera pasar esos datos a mi tabla 2 pero sin q se inserten de nuevo los mismos datos d la 1ra vez sino solamente los ultimos datos
espero q me puedan ayudar

5 11 2015
Blogger

Revisa la Wikipedia.

https://es.wikipedia.org/wiki/Join

si las tablas no cambian, no es necesario que crees un string con la sentencia, hazlo directamente, y pon la condicion de un join para que solo traiga información que requieres. Prueba priumero haciendo el select y posteriormente cuando tengas la sentencia adecuada, pones el insert into

22 01 2016
hartman

Buenas, Tengo una base de datos compuesta por 4 tablas. La tabla1 es la que se alimenta con los registros diariamente, las primeras 5 columnas esta compuesta por datos numéricos, tanto la tabla1 y la tabla2, estoy necesitando que cuando se agregue información en la tabla1, que la tabla2 se actualice por medio de la ultima fecha (columna9) y a su vez actualice los datos de la columan6, 7 y 8, usando la información que existe en la tabla1. La búsqueda de actualización hay que hacerla con las columna 2, 3, 4 y 5, de la tabla2. gracias

18 04 2016
Manuel Villalba

buen aporte, gracias por brindar tus conocimientos….

5 11 2016
ARCADIO

ESPERO ME PUEDAN AYUDAR.

Estoy desarrollando un formulario para pagos de cuotas de clientes, estos pagos estan basados en un convenio previo con el cliente.
es decir, el cliente se compromente a pagar los servicios o productos en cuotas.

Tengo tres tablas:

1. Convenio

IdConvenio Cliente FechaConvenio IdCliente
1 Juan 25/09/2016 1
NOTA: el IdConvenio es Identity

2. ConvenioDetalle

IdConvenioDet Concepto IdConvenio TotalAcuerdo Cuotas ValorCuota
1 Materiales 1 100 2 50
2 Seguridad 1 300 3 100

NOTA: el IdConvenioDetalle Identity

3. ConvenioPagos

IdConvenioPago IdConvenioDetalle NroCuota ValorCuota
1 1 1 50
2 1 2 50
3 2 1 100
4 2 2 100
5 2 3 100

NOTA: IdConvenioPago es campo Identity

El IdConvenio que es identity de la tabla Convenio lo guardo bien en la tabla ConvenioDetalle en su campo IdConvenio.
Lo que deseo es que al pulsar el boton Guardar, se guarden los valores identity del campo IdConvenioDetalle de la tabla ConvenioDetalle
en el campo IdConvenioDetalle de la tabla ConvenioPagos pero teniendo en cuenta que los valores identity dependen de las cuotas que el
cliente se comprometa a pagar.

probe con SELECT @@IDENTITY pero me guarda siempre el ultimo Identity y asi no quiero.
Yo quiero que los IdConvenioDetalle de la tabla ConvenioDetalle se guarde en la tabla ConvenioPagos a la vez, tal como lo muestro en el punto nro. 3:

IdConvenioPago IdConvenioDetalle NroCuota ValorCuota
1 2 1 50
2 2 2 50
3 2 1 100
4 2 2 100
5 2 3 100

Gracias.

17 11 2016
Blogger

Necesitas estudiar:
Como construir un abc (altas, bajas y consulta) a una tabla.
Generación de reportes Maestro-Detalle.
ANSI-SQL.
Normalización de Bases de datos (1FN, 2FN, 3FN, 4FN, 5FN)
Desarrollo de sistemas transaccionales.
Algoritmos.
Transacciones ACID, aplicaciones de transacciones en un manejador de Base de Datos.

Dedica tiempo a estos temas para que se te facilite el desarrollo de sistemas.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: