Con más de 2 bases de datos se complica la cosa. Yo creo que sí funcionaría, aunque veo un par de inconvenientes:
1.- Con tanto INSERT y UPDATE no se que rendimiento obtendrías. Sería cuestión de probarlo.
2.- Cuando llegas a este punto:
Cita:
(que si ya se habia insertado con el del query1 lo va a saltear, y sino lo va a agregar)
|
desconozco si se puede evitar que se muestre una excepción por violación de clave primaria cuando intentas insertar un producto que ya existe. Nunca se me ha dado el caso, quizás si se pueda pero ignoro cómo.
Tengo en mente otra solución: utilizando tablas temporales (una por cada tabla de cada base de datos) y un procedimiento almacenado con 2 cursores. Las tablas temporales las rellenarías tal y como hemos visto hasta ahora, recorriendo las IBQuery y utilizando el criterio "desde" y "hasta".
Una vez rellenas (para evitar errores te recomiendo que las tablas se llamen igual o parecido en la base de datos final, y los campos también) el SP sería algo tal que así:
Código SQL
[-]
FOR
SELECT A.CODIGO, A.NOMBRE, A.PRECIO FROM TABLA2 A
WHERE NOT EXISTS (SELECT B.CODIGO FROM TABLA1 WHERE B.CODIGO=A.CODIGO)
INTO :COD, :NOM, :PREC2
DO
INSERT INTO TABLA_FINAL (CODIGO, NOMBRE, PRECIO2) VALUES (:COD, :NOM, :PREC2);
FOR
SELECT CODIGO, NOMBRE, PRECIO FROM TABLA1
INTO :COD, :NOM, :PREC
DO
BEGIN
SELECT PRECIO FROM TABLA2 WHERE CODIGO=:COD
INTO :PREC2
INSERT INTO TABLA_FINAL (CODIGO, NOMBRE, PRECIO1, PRECIO2) VALUES (:COD, :NOM, :PREC, :PREC2);
SELECT PRECIO FROM TABLA3 WHERE CODIGO=:COD
INTO :PREC2
INSERT INTO TABLA_FINAL (CODIGO, NOMBRE, PRECIO1, PRECIO2) VALUES (:COD, :NOM, :PREC, :PREC2);
END
Un SP es más potente y más rapido que tanto INSERT y UPDATE. Tendrías que depurarlo un poco y adaptarlo a tus necesidades. Como ya he dicho antes todo es cuestión de probarlo.