2012-07-10 30 views
26

Có cách nào dễ dàng để sao chép một bảng vào cùng một cơ sở dữ liệu với tên khác. Tôi đã thử một số trong số này được liệt kê dưới đây,Tạo một bản sao của một bảng trong cùng một cơ sở dữ liệu 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"

Không ai trong số những hoạt động Tôi đang sử dụng DB2 phiên bản 9.5

+0

Tại sao bạn sử dụng 1 = 2 điều kiện cho điều này? – Line

+1

Ồ, ok, bởi vì Bạn không muốn sao chép dữ liệu, chỉ cần lược đồ. Xin lỗi vì đã làm phiền bạn;) – Line

Trả lời

30

Bạn phải bao quanh phần được chọn bằng dấu ngoặc đơn.

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

Nên hoạt động. Chú ý đến tất cả những điều @Gilbert nói sẽ không được sao chép.

Tôi giả sử DB2 trên Linux/Unix/Windows tại đây, vì bạn nói DB2 v9.5.

+2

Điều kiện 'WHERE' của bạn hơi lạ.Nếu bạn đang sử dụng vị từ sai để có DB2 không sao chép dữ liệu, bạn có thể làm điều đó như tôi có ở đây với 'WITH NO DATA' để chỉ sao chép cấu trúc. Hoặc bạn chỉ có thể thực hiện một 'CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB'. – bhamby

+0

cảm ơn @ bhamby .. btwn trong trường hợp của tôi db2 đang chạy trên AIX –

+1

Tại sao "KHÔNG CÓ DỮ LIỆU" Anh ấy không muốn sao chép nội dung? Làm thế nào để tạo bảng VÀ làm chèn? –

28

Hãy thử điều này:

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

Tùy chọn mà không được sao chép bao gồm:

  • Kiểm tra hạn chế
  • giá trị mặc định
  • Cột
  • Cột bình luận
  • phím Ngoại
  • Logged và tùy chọn compact trên các cột BLOB
  • loại biệt
+0

cảm ơn @Gilbert –

-2
CREATE TABLE NEW_TABLENAME LIKE OLD_TABLENAME; 

trình cho DB2 V 9,7

+1

Nó KHÔNG sao chép DỮ LIỆU. – KMetin

3

Hai bước hoạt động tốt:

tạo bảng bu_x như (chọn a, b, c, d từ x) VỚI không có dữ liệu;

chèn vào bu_x (a, b, c, d) chọn chọn a, b, c, d từ x;

+1

Bạn có thể xác nhận rằng 'select select' trong bước thứ hai là chính xác và dự định không? – EWit

+0

'INSERT INTO XXX.YYY (SELECT * FROM ZZZ.TTT)' làm việc cho tôi trên DB2 7 – ATorras

0

Chúng tôi có thể sao chép tất cả các cột từ một bảng khác, bảng hiện có:

INSERT INTO table2 SELECT * FROM table1;

Hoặc chúng ta có thể sao chép chỉ có các cột chúng ta muốn thành khác, bảng hiện có:

INSERT INTO table2 (column_name (s)) SELECT column_name (s) FROM table1;

hoặc CHỌN * INTO BACKUP_TABLE1 TỪ TABLE1

Các vấn đề liên quan