Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-08-2005
Avatar de Spynosa
Spynosa Spynosa is offline
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
Modificacion masiva

Hola a tod@s

Como podria actualizar una tabla con los datos de otra, por ejemplo para insertar lo hago asi:
Código SQL [-]
insert into articulos  select * from articulosex
pero para modificar no se como podría hacerlo porque esto no funciona
Código SQL [-]
update articulos select * from articulosex
Gracias
Responder Con Cita
  #2  
Antiguo 18-08-2005
fabianmk fabianmk is offline
Miembro
 
Registrado: jul 2004
Posts: 38
Poder: 0
fabianmk Va por buen camino
Proba con esta forma:

update tabla1
set campo1 = (select campo1
from tabla2
where tabla1.campo = tabla2.campo),
campo2= (select campo2
from tabla2
where tabla1.campo = tabla2.campo)

Salu2

Fabian
Responder Con Cita
  #3  
Antiguo 19-08-2005
Avatar de Spynosa
Spynosa Spynosa is offline
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
gracias fabian he probado lo que me has dicho asi:

Código SQL [-]
update articulos
set textura  = (select textura
from articulosex
where articulos.codinteno = articulosex.codinteno),
color= (select color
from articulosex
where articulos.codinteno=articulosex.codinteno)
y se me queda el IBExpert colgado
tengo 8.000 articulos no creo que sea por eso ¿no?

Un saludo
Responder Con Cita
  #4  
Antiguo 19-08-2005
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 21
lbuelvas Va por buen camino
Que tal con un preocedimiento almacenado ?, normalmente evito el tipo de construcciones basados en SQL pues queda un poco dificil determinar el comportamineto y rendimiento, espero te sirva este ejemplo:

Estas son las tablas por favor colocale datos,

Código SQL [-]
CREATE TABLE TABLA_A (
    ID       INTEGER NOT NULL,
    CAMPO_1  INTEGER,
    CAMPO_2  INTEGER,
    CAMPO_3  INTEGER
);

ALTER TABLE TABLA_A ADD CONSTRAINT PK_TABLA_A PRIMARY KEY (ID);

CREATE TABLE TABLA_B (
    ID       INTEGER NOT NULL,
    CAMPO_1  INTEGER,
    CAMPO_2  INTEGER,
    CAMPO_3  INTEGER
);

ALTER TABLE TABLA_B ADD CONSTRAINT PK_TABLA_B PRIMARY KEY (ID);

Este es un procedimiento simple

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE SP_ACTUALIZACION 
AS
DECLARE VARIABLE V_ID INTEGER;
DECLARE VARIABLE V_CAMPO_1 INTEGER;
DECLARE VARIABLE V_CAMPO_2 INTEGER;
begin
  /* Procedimiento para actualizar datos desde tabla_b hacia tabla_a, con
     modificacion de mas de un campo. */
  for select id,
             campo_1,
             campo_2
      from tabla_b
      into   :v_id,
             :v_campo_1,
             :v_campo_2
  do begin
    update tabla_a
    set    campo_1 = :v_campo_1,
           campo_2 = :v_campo_2
    where  id = :v_id;
  end
end
^

SET TERM ; ^

y este es un procedimiento con notificacion

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE SP_ACTUALIZACION_PLUS 
RETURNS (
    PS_ID INTEGER,
    PS_SALIDA VARCHAR(20))
AS
DECLARE VARIABLE V_CAMPO_1 INTEGER;
DECLARE VARIABLE V_CAMPO_2 INTEGER;
begin
  /* Procedimiento para actualizar datos desde tabla_b hacia tabla_a, con
     modificacion de mas de un campo.
     Se adiciono mejora para indicar el estado de actualizacion, ya que puede
     haber registros en la tabla_b que no se encuentran en la tabla_a.
     Queda de tarea indicar que registros de la tabla_a no estan en tabla_b !
  */
  for select id,
             campo_1,
             campo_2
      from tabla_b
      into   s_id,
             :v_campo_1,
             :v_campo_2
  do begin
    if (exists (select first 1 '*'
                from   tabla_a
                where  id = s_id)) then
    begin
      update tabla_a
      set    campo_1 = :v_campo_1,
             campo_2 = :v_campo_2
      where  id = s_id;
      ps_salida = 'EXISTE';
    end
    else
    begin
      ps_salida = 'NO EXISTE';
    end
    suspend;
  end
end
^

SET TERM ; ^
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #5  
Antiguo 19-08-2005
Avatar de Spynosa
Spynosa Spynosa is offline
Miembro
 
Registrado: nov 2004
Ubicación: Ecija - Sevilla
Posts: 99
Poder: 20
Spynosa Va por buen camino
Wink

Muchas gracias por tu respuesta, me ha funcionado perfectamente, es justo lo que quería.

No te puedes imaginar del apuro que me has sacado.
Gracias
Responder Con Cita
  #6  
Antiguo 22-08-2005
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 21
lbuelvas Va por buen camino
Con el mayor de los gustos.
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #7  
Antiguo 07-09-2010
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Gracias compañeros, me sirvió este post para hacer algo que me tenía preocupado.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #8  
Antiguo 07-10-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Bueno lo que no veo es por que no te funciona el Insert ... Select
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:16:26.


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
Copyright 1996-2007 Club Delphi