A veces queremos que en una tabla T1 se inserten datos que se encuentran en una tabla T2. Hay varias formas de conseguir eso, la más rápida de todas es la siguiente:

INSERT INTO
   T1
SELECT
   *
FROM
   T2

Por supuesto que debes reemplazar T1 y T2 por los verdaderos nombres de tus respectivas tablas. Esto funciona siempre y cuando ambas tablas tengan la misma estructura, si ese no es el caso entonces hay que especificar las columnas involucradas.

INSERT INTO
   T1
   (T1Columna1,
    T1Columna2,
    T1Columna3)
SELECT
   T2Columna1,
   T2Columna2,
   T2Columna3
FROM
   T2

Los nombres de las columnas pueden ser distintos ya que el Firebird no se fija en el nombre de las columnas para realizar la inserción. Los únicos requisitos son:

  • La cantidad de columnas después del INSERT debe ser igual a la cantidad de columnas después del SELECT
  • Los tipos de datos de cada columna después del INSERT deben ser iguales o compatibles con los tipos de datos de cada columna después del SELECT

NOTA:

Si la estructura de las tablas puede cambiar es preferible poner los comandos dentro de una instrucción EXECUTE STATEMENT para que no muestre el error “object in use”. O sea:

EXECUTE STATEMENT “INSERT INTO T1…”

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21