2012-07-10 96 views
26

有沒有一種簡單的方法可以將表複製到同一個數據庫,當然有不同的名稱。 我想其中的一些在下面列出,在同一個數據庫中創建一個表的副本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"

這些都不工作 我使用DB2 V9.5

+0

你爲什麼要使用1 = 2條件呢? – Line 2015-10-28 10:11:42

+1

哦,好的,因爲你不想複製數據,只是模式。對不起,打擾你;) – Line 2015-10-28 10:12:43

回答

30

您必須用圓括號包圍選定部分。

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

應該工作。注意所有的事情@Gilbert說不會被複制。

我假設DB2在Linux/Unix/Windows上,因爲你說DB2 v9.5。

+2

你的WHERE條件有點奇怪。如果您使用false謂詞讓DB2不復制數據,您可以像我在這裏用'WITH NO DATA'來完成複製結構。或者你也可以做一個'CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB'。 – bhamby 2012-07-11 06:29:09

+0

感謝@bhamby ..在我的情況下,btwn db2在AIX上運行 – 2012-07-11 12:01:10

+1

爲什麼「沒有數據」他是不是也想複製內容?如何創建表格並插入? – 2016-06-03 07:37:09

28

試試這個:

CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB; 
INSERT INTO SCHEMA.NEW_TB (SELECT * FROM SCHEMA.OLD_TB); 
未複製0

選項包括:

  • 檢查約束
  • 列默認值
  • 專欄評論
  • 外鍵
  • 記錄,並在BLOB列
  • 鮮明的類型
  • 緊湊選項
+0

謝謝@吉爾伯特 – 2012-07-11 11:59:16

-2
CREATE TABLE NEW_TABLENAME LIKE OLD_TABLENAME; 

Works爲DB2 V 9.7

+1

它不會複製DATA。 – KMetin 2014-10-27 13:32:48

3

兩個步驟正常工作:

創建表bu_x爲(選擇一個,B,C,從X d)沒有數據;插入bu_x(a,b,c,d)select從x中選擇a,b,c,d;

+1

您能否確認第二步中的「select select」是否正確並有意? – EWit 2014-11-24 10:52:57

+0

'INSERT INTO XXX.YYY(SELECT * FROM ZZZ.TTT)'在DB2 7上爲我工作 – ATorras 2015-06-09 10:53:16

0

我們可以從一個表複製所有列轉移到另一個,現有的表:

INSERT INTO表2 SELECT * FROM表1;

或者我們可以只複製我們要到另一列,現有表:

INSERT INTO表2 (列(S)) SELECT列名(S) FROM表1;

或SELECT * INTO BACKUP_TABLE1 FROM表1

相關問題