在同一数据库DB2中创建表的副本

Gov*_*las 31 db2 aix copy

有没有一种简单的方法可以将表复制到具有不同名称的同一数据库.我试过下面列出的一些,

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

Gil*_*anc 36

试试这个:

CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB;
INSERT INTO SCHEMA.NEW_TB (SELECT * FROM SCHEMA.OLD_TB);
Run Code Online (Sandbox Code Playgroud)

未复制的选项包括:

  • 检查约束
  • 列默认值
  • 专栏评论
  • 外键
  • BLOB列上的记录和紧凑选项
  • 不同的类型


bha*_*mby 34

您必须用括号括住选择部分.

CREATE TABLE SCHEMA.NEW_TB AS (
    SELECT *
    FROM SCHEMA.OLD_TB
) WITH NO DATA
Run Code Online (Sandbox Code Playgroud)

应该管用.注意@Gilbert说不会被复制的所有事情.

我在Linux/Unix/Windows上假设DB2,因为你说的是​​DB2 v9.5.

  • 你的'WHERE'条件有点奇怪.如果您使用false谓词让DB2不复制数据,那么您可以像我在这里使用`WITH NO DATA`来复制结构一样.或者你可以做一个`CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB`. (2认同)
  • @ThorstenNiehues尽管没有任何意义,但是没有`WITH DATA`或`WITH ALL DATA`选项,你也不能省略`WITH`子句.所以我们必须使用`WITH NO DATA`(或`LIKE`版本),然后使用单独的`INSERT ... SELECT`查询输入数据. (2认同)