2012-07-10 13 views
26

Esiste un modo semplice per copiare una tabella nello stesso database, ovviamente con un nome diverso. Ho provato alcuni di questi di seguito elencati,Creare una copia di una tabella all'interno dello stesso database 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"

Nessuna di queste ha funzionato Sto usando DB2 v9.5

+0

Perché stai utilizzando la condizione 1 = 2 per questo? – Line

+1

Oh, ok, perché non vuoi copiare dati, solo schema. Scusa se ti disturbo;) – Line

risposta

30

Devi circondare la parte selezionata con le parentesi.

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

Dovrebbe funzionare. Presta attenzione a tutte le cose che @Gilbert ha detto non sarebbe stato copiato.

Sto assumendo DB2 su Linux/Unix/Windows qui, dal momento che si dice DB2 v9.5.

+2

La tua condizione 'WHERE' è un po' dispari.Se stai usando il falso predicato per fare in modo che DB2 non copi i dati, puoi farlo come ho qui con 'WITH NO DATA' per copiare solo la struttura. O puoi semplicemente fare un 'CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB'. – bhamby

+0

grazie @bhamby .. btwn nel mio caso db2 è in esecuzione su AIX –

+1

Perché "WITH NO DATA" Non voleva copiare anche il contenuto? Come creare la tabella E fare inserti? –

28

Prova questo:

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

opzioni che non sono copiati includono:

  • Controlla i vincoli
  • valori predefiniti
  • Colonna
  • commenta Colonna
  • chiavi esterne
  • registrato e opzione compatto su colonne BLOB
  • tipi distinti
+0

grazie @Gilbert –

-2
CREATE TABLE NEW_TABLENAME LIKE OLD_TABLENAME; 

Works for DB2 V 9.7

+1

NON copia i DATI. – KMetin

3

due passaggi funziona bene:

CREATE TABLE bu_x come (selezionare a, b, c, d da x) senza dati;

inserire in bu_x (a, b, c, d) selezionare selezionare a, b, c, d da x;

+1

Puoi confermare che 'select select' nel secondo step è corretto e inteso? – EWit

+0

'INSERISCI IN XXX.YYY (SELEZIONA * DA ZZZ.TTT)' ha funzionato per me su DB2 7 – ATorras

0

Siamo in grado di copiare tutte le colonne da un tavolo all'altro, tabella esistente:

INSERT INTO tabella2 SELECT * FROM tabella1;

Oppure possiamo copiare solo le colonne che vogliamo in un altro, tabella esistente:

INSERT INTO tabella2 (nome_colonna (s)) SELEZIONE column_name (s) FROM tabella1;

o SELECT * IN BACKUP_TABLE1 FROM TABLE1

Problemi correlati