2012-07-10 33 views
26

¿Existe una forma fácil de copiar una tabla a la misma base de datos con un nombre diferente? Probé algunos de ellos se enumeran a continuación,Crear una copia de una tabla dentro de la misma base de datos DB2

db2 "CREATE TABLE SCHEMA.NEW_TB COPY AS SELECT * FROM SCHEMA.OLD_TB WHERE 1 = 2"

db2 "SELECT INTO SCHEMA.NEW_TB FROM SCHEMA.OLD_TB"

db2 "SELECT * FROM SCHEMA.OLD_TB INSERT INTO SCHEMA.NEW_TB"

Ninguno de ellos trabajó estoy utilizando DB2 v9.5

+0

¿Por qué utiliza 1 = 2 condición para esto? – Line

+1

Oh, vale, porque no quiere copiar datos, solo esquema. Perdón por molestarte;) – Line

Respuesta

30

Debe rodear la parte seleccionada con paréntesis.

CREATE TABLE SCHEMA.NEW_TB AS (
    SELECT * 
    FROM SCHEMA.OLD_TB 
) WITH NO DATA 

Debería funcionar. Presta atención a todas las cosas que según Gilbert no se copiarán.

Supongo que DB2 está en Linux/Unix/Windows aquí, ya que dice DB2 v9.5.

+2

Tu condición 'WHERE' es un poco extraña.Si está utilizando el predicado falso para que DB2 no copie los datos, puede hacerlo como lo hice aquí con 'WITH NO DATA' para copiar solo la estructura. O simplemente puede hacer un 'CREATE TABLE SCHEMA.NEW_TB Like SCHEMA.OLD_TB'. – bhamby

+0

gracias @bhamby .. btwn en mi caso db2 se está ejecutando en AIX –

+1

¿Por qué "SIN DATOS" ¿No quería copiar el contenido también? ¿Cómo crear la tabla Y hacer inserciones? –

28

Prueba esto:

CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB; 
INSERT INTO SCHEMA.NEW_TB (SELECT * FROM SCHEMA.OLD_TB); 

Las opciones que no se copian incluyen:

  • Restricciones de comprobación
  • valores por defecto
  • columna
  • comentarios de la columna
  • Las claves externas
  • de inicio de sesión y la opción compacta en columnas BLOB
  • tipos distintos
+0

gracias @Gilbert –

-2
CREATE TABLE NEW_TABLENAME LIKE OLD_TABLENAME; 

Works para DB2 V 9.7

+1

NO copia datos. – KMetin

3

dos etapas funciona bien:

crear bu_x tabla como (seleccione a, b, c, d de x) sin datos;

insertar en bu_x (a, b, c, d) seleccionar seleccionar a, b, c, d desde x;

+1

¿Puedes confirmar que 'select select' en el segundo paso es correcto y está destinado? – EWit

+0

'INSERTAR EN XXX.YYY (SELECCIONAR * FROM ZZZ.TTT)' funcionó para mí en DB2 7 – ATorras

0

Podemos copiar todas las columnas de una tabla a otra, tabla existente:

INSERT INTO tabla2 SELECT * FROM tabla1;

O podemos copiar sólo las columnas que queremos en otro, tabla existente:

INSERT INTO tabla2 (nombre_columna (s)) SELECT nombre_columna (s) de la Tabla1;

o SELECT * EN BACKUP_TABLE1 de la Tabla1

Cuestiones relacionadas