Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ?Como realizar un insert de multiples filas con tablas de diferentes bases de datos? (https://www.clubdelphi.com/foros/showthread.php?t=75862)

jasmad 23-09-2011 17:51:01

?Como realizar un insert de multiples filas con tablas de diferentes bases de datos?
 
el insert de multiples filas permite realizar una varias inserciones en una columna sin tener que insertar los demas datos de la fila... yo se que esto esto es posible exportando datos de una misma base de datos por ejemplo:
Código SQL [-]
INSERT INTO tMarcas
(marca)
SELECT DISTINCT marca FROM tCoches;

pero no se podra hacer esto on tablas de otra base de datos, talvez por programacion utilizando componentes como Zeos?

olbeup 23-09-2011 22:04:32

No se a que te refieres, si tu quieres añadir en una tabla, de distintas base de datos lo que tienes que hacer es:
Código SQL [-]
INSERT INTO Tabla1
  (
    CODIGO
    ,NOMBRE
    ,DIRECCION
    ,DIRECCION2
  )
SELECT
    T2.CODIGO
    ,T2.NOMBRE
    ,T2.DIRECCION
    ,T3.DIRECCION
  FROM Tabla2 AS T2
    INNER JOIN Tabla3 AS T3
      ON T2.CODIGO = T3.CODIGO
  WHERE T2.NOMBRE LIKE 'PEDRO'
Espere que te haya servido como ejemplo.

Un saludo

jangel_ramirezm 30-09-2011 22:46:04

En sql server seria algo asi como:

Insert into nombre_tabla (c1, c2, c3)
select c1, c2, c3
from nombre_otra_base.dbo.nombre_tabla

siempre y cuando las bases de datos esten en la misma instancia del servidor.

Saludos

jasmad 04-10-2011 16:48:32

Cita:

Empezado por olbeup (Mensaje 413229)
No se a que te refieres, si tu quieres añadir en una tabla, de distintas base de datos lo que tienes que hacer es:
Código SQL [-]INSERT INTO Tabla1 ( CODIGO ,NOMBRE ,DIRECCION ,DIRECCION2 ) SELECT T2.CODIGO ,T2.NOMBRE ,T2.DIRECCION ,T3.DIRECCION FROM Tabla2 AS T2 INNER JOIN Tabla3 AS T3 ON T2.CODIGO = T3.CODIGO WHERE T2.NOMBRE LIKE 'PEDRO'

Espere que te haya servido como ejemplo.

Un saludo

gracias por tu respuesta pero lo que pasa es que eso es para tablas de la misma base de datos y lo que yo ocupo es tomar tablas que no estan en una misma base de datos.

jasmad 04-10-2011 16:49:24

Cita:

Empezado por jangel_ramirezm (Mensaje 414237)
En sql server seria algo asi como:

Insert into nombre_tabla (c1, c2, c3)
select c1, c2, c3
from nombre_otra_base.dbo.nombre_tabla

siempre y cuando las bases de datos esten en la misma instancia del servidor.

Saludos

eso me suena sera probarlo en firebird gracias

jasmad 19-10-2011 18:57:50

compa eso no sirve para firebird creo que es por el hecho que las bds en firebird son archivos nose...
sigo buscando...

Casimiro Notevi 19-10-2011 20:04:27

Cita:

Empezado por jasmad (Mensaje 416200)
compa eso no sirve para firebird creo que es por el hecho que las bds en firebird son archivos nose...
sigo buscando...

¿Qué son "archivos nose"?

jasmad 24-10-2011 02:22:00

eso es una falta ortografica disculpa
corrijo:
eso no sirve para firebird creo que es por el hecho que las bds en firebird son archivos, no se

Casimiro Notevi 24-10-2011 09:08:42

Cita:

Empezado por jasmad (Mensaje 416559)
corrijo:
eso no sirve para firebird creo que es por el hecho que las bds en firebird son archivos, no se

Sí, pero no se entiende lo que quieres decir con eso, todos las bases de datos y todos los programas, son archivos, ficheros, o como gustes llamarles, ¿pero qué quiéres decir?

AzidRain 24-10-2011 21:09:09

Es tan simple como la sintaxis SQL que dice asi:

BASE_DATOS.TABLA.CAMPO

Ergo la solución ya te la puso jasmad y si funciona tanto para FB como para MySQL. Siempre y cuando las bases de datos se encuentren en el mismo servidor y el usuario tenga privilegios adecuados en cada una de las bases de datos.

Lo que no se puede hacer al menos ni en FB ni en MYSQL es usar bases de datos ubicadas en servidores diferentes.

jasmad 27-10-2011 20:43:25

disculpa azid pero eso no me funciona de ninguna manera...

entro al ibexpert,
conecto dos archivos .FBD,
abro un SQLEditor del firebird ,
y hago la siguiente consulta:
Código SQL [-]
insert into tablaProba1(NOMBRE,APELLIDOS)
select name, lastName
FROM basedatos2.tablaProba2

y pasa que el mismo ibexpert genera error... :(

AzidRain 30-10-2011 19:37:06

En MySQL funciona sin problemas aqui tienes un link de la sintaxis y ejemplos, en FB ya no estoy tan seguro ya que no lo manejo mucho (me da cus cus eso de todo en un solo archivo). Revisa el link y quiza te eche una luz.

Lepe 31-10-2011 12:14:53

En FB, no sé en qué versión se ha implementado, creo es en 2.0 o 2.5 (no lo tengo claro).

En todo caso, lo que sí funciona en FB 1.0 y superior es una tabla externa: Creas una tabla que guarda todo en un .txt, después insertas los registros y borras la tabla (al borrar una tabla externa es cuando se llena el archivo .txt), después en la otra BBDD, haces lo mismo: creas una tabla externa (llamando a ese mismo archivo y tendrás todos los registros).

Llegados a este punto tienes la tabla externa (que es una tabla más de tu BBDD) donde están los registros a insertar y en la misma BBDD tienes la tabla destino.

Obviamente la tabla de destino y origen deben tener la misma estructura (mismos campos y longitudes para que no haya truncamiento ni cambios de formatos)

Código SQL [-]
create table  tablaIO external "c:\mio.txt"(
nombre varchar(30), 
ape varchar(40)
)

commit work;

insert into tablaIO
values ( select * from tablaOrigen);

drop table tablaIO;

commit work;

y la importación desde la segunda BBDD es casi lo mismo:
- crear tabla externa (que en realidad ya existe y tiene los registros exportados)
- el insert into es al revés, pillas desde tablaIO e insertas en tu tabla de destino
- borras tablaIO y commit.

PD: Hecho de memoria, puede tener algún error. Si eso comenta e intentaré afinar un poco más.


La franja horaria es GMT +2. Ahora son las 05:38:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi