Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Insertar registros (https://www.clubdelphi.com/foros/showthread.php?t=89319)

sowei 01-11-2015 01:00:08

Insertar registros
 
Hola amigos
Tengo poca experiencia en sql. Me gustaría saber si es posible que en una sentencia puedan insertarse registros en una tabla que sean el resultado de un 'select'.

Es decir, quiero hacer un 'select' y que el grupo de registros devueltos se inserten en una tabla.

La idea es grabar una tabla temporal a partir de una consulta, y que esta tarea la haga el servidor directamente. Así evitar que el resultado venga al ordenador cliente y de este se grabe el temporal en el servidor, haciendo viajar los datos por la red como locos.
No se si me he explicado bien.
Utilizo interbase.

Gracias y saludos

luisito12382 01-11-2015 01:28:24

lo estas programando en delphi

sowei 01-11-2015 01:36:04

Cita:

Empezado por luisito12382 (Mensaje 498696)
lo estas programando en delphi

Si, lo programo en delphi. Perdonad no haberlo especificado anteriormente

Casimiro Notevi 01-11-2015 09:34:48

Depende de lo que quieras hacer, ejemplo:
Código SQL [-]
insert into tabla2 select * from tabla1
Obviamente, en este caso las tablas deben ser iguales.
Y aquí da igual el delphi, es sql, lo puedes poner en un stored procedure de la base de datos y lanzarlo cuando lo necesites.

Por cierto, procura poner títulos descriptivos a tus preguntas, gracias :)

sowei 01-11-2015 15:52:19

Cita:

Empezado por Casimiro Notevi (Mensaje 498703)
Depende de lo que quieras hacer, ejemplo:
Código SQL [-]
insert into tabla2 select * from tabla1
Obviamente, en este caso las tablas deben ser iguales.
Y aquí da igual el delphi, es sql, lo puedes poner en un stored procedure de la base de datos y lanzarlo cuando lo necesites.

Por cierto, procura poner títulos descriptivos a tus preguntas, gracias :)

La idea es grabar una tabla nueva (temporal) y por lo tanto diferente a la que estoy consultando, más que nada porque el resultado de la consulta proviene de varias tablas.

Por poner un ejemplo sencillo, hacer un select de la tabla LINEAS DE FACTURA, para obtener los artículos vendidos. A su vez realizar un left join para obtener el cabezal de la factura y obtener el campo FECHA para descartar los que no queremos. Y también un left join con la tabla ARTICULOS para obtener la descripción del articulo. El resultado (varios registros) grabarlos en la tabla VENTAPERIODO que tendría los campos p.e. ARTICULO, CANTIDAD, PRECIO, IMPORTE, DESCRIPCION, ...

Este sería un ejemplo sencillo. Lógicamente la consulta sería mucho más complicada.

Supongo que desde SQL puro no puedo hacerlo, pero quizá sí con stored procedures?

olbeup 02-11-2015 10:36:55

Cita:

Empezado por sowei (Mensaje 498706)
La idea es grabar una tabla nueva (temporal) y por lo tanto diferente a la que estoy consultando, más que nada porque el resultado de la consulta proviene de varias tablas.

Por poner un ejemplo sencillo, hacer un select de la tabla LINEAS DE FACTURA, para obtener los artículos vendidos. A su vez realizar un left join para obtener el cabezal de la factura y obtener el campo FECHA para descartar los que no queremos. Y también un left join con la tabla ARTICULOS para obtener la descripción del articulo. El resultado (varios registros) grabarlos en la tabla VENTAPERIODO que tendría los campos p.e. ARTICULO, CANTIDAD, PRECIO, IMPORTE, DESCRIPCION, ...

Este sería un ejemplo sencillo. Lógicamente la consulta sería mucho más complicada.

Supongo que desde SQL puro no puedo hacerlo, pero quizá sí con stored procedures?

Hola sowei,

En SQL se puede hacer todo, lo que tienes que hacer es crearte una tabla con los campos igualmente definidos que vas a necesitar de las tres tablas y crear la SQL que recoja los campos que vas a grabar.

Código SQL [-]
INSERT INTO VentaPeriodo
  SELECT
      LF.CAMPOLINEAFACTURA
      ,LF....
      ,LF....
      ,LF....
      ,F.CAMPOFACTURA
      ,F....
      ,F....
      ,F....
      ,A.CAMPOARTICULO
      ,A....
      ,A....
      ,A....
    FROM LineasFacturas AS LF
      INNER JOIN Facturas AS F
        ON F.IDFACTURA = LF.FACTURAID
      INNER JOIN Articulos AS A
        ON A.IDARTICULO = LF.ARTICULOID
    WHERE F.FECHAFACTURA = '02/11/2015'

Un saludo.

sowei 02-11-2015 17:42:16

Cita:

Empezado por olbeup (Mensaje 498725)
Hola sowei,

En SQL se puede hacer todo, lo que tienes que hacer es crearte una tabla con los campos igualmente definidos que vas a necesitar de las tres tablas y crear la SQL que recoja los campos que vas a grabar.

Código SQL [-]INSERT INTO VentaPeriodo SELECT LF.CAMPOLINEAFACTURA ,LF.... ,LF.... ,LF.... ,F.CAMPOFACTURA ,F.... ,F.... ,F.... ,A.CAMPOARTICULO ,A.... ,A.... ,A.... FROM LineasFacturas AS LF INNER JOIN Facturas AS F ON F.IDFACTURA = LF.FACTURAID INNER JOIN Articulos AS A ON A.IDARTICULO = LF.ARTICULOID WHERE F.FECHAFACTURA = '02/11/2015'


Un saludo.


Anda! Es exactamente lo que quería y no tenía ni idea de si se podía hacer.

He probado con IBExpert con una consulta sencilla grabando en una tabla temporal y HA FUNCIONADO PERFECTAMENTE !!! #:-)##:-)#

Gracias a todos por las respuestas v:-)v


La franja horaria es GMT +2. Ahora son las 18:30:03.

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