2013-11-15 56 views
3

我想在DB2中重命名表像这样如何在sql db2中重命名表?

rename table schema1.mytable to schema2.mytable 

但得到以下错误消息:

the name "mytable" has the wrong number of qualifiers.. SQLCODE=-108,SQLSTATE=42601 

什么是这里的问题....我使用从确切的语法IBM publib文档。

回答

7

您无法更改给定对象的模式。你必须重新创建它。

有severals的方式做到这一点:

  • 如果你只有一个表,你可以exportimport/load表。如果使用IDX格式,则DDL将包含在生成的文件中。如果使用其他格式,表格已创建。
  • 您可以通过重新创建表:

    Create table schema2.mytable like schema1.mytable

  • 你可以用db2look工具提取DDL

  • 如果你正在改变给出模式的架构名称,你可以使用ADMIN_COPY_SCHEMA

最后两个选项只创建表结构,您仍然需要导入数据。其创建表后,可以通过不同的方式插入数据:

  • 直接从光标

  • 插入

    insert into schema2.mytable select * from schema1.mytable

  • 通过负载通过从文件加载或进口(该文件在上一步输出)

问题是forei gn关系,因为它们必须被重新创建。您可以创建一个alias。这很容易,你不必处理关系。

+0

您好感谢 - 想可能有一个命令来简单地将表移动到新的模式中,但是从实际表中在另一个模式中创建新表的方式,然后插入为我完成这项工作。但更麻烦,但没关系。 – brucezepplin

+1

还有一个'ADMIN_MOVE_TABLE'系统存储过程完全按照它的说法进行,包括所有的依赖关系。 – mustaccio

+0

@mustaccio我也认为ADMIN_MOVE_TABLE可以做到这一点,但文档没有选项来提供不同的模式:http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2 .luw.sql.rtn.doc/doc/r0055069.html – AngocA

0

您不是在提供的示例中重命名表,而是尝试移动到不同的模式,它不是同一件事。查看db2move工具。

-1

如果您保持原样并使用新名称和模式创建别名,该怎么办?

+0

不幸的是,这实际上并没有移动表格,它只是创建一个指向它的指针。这种_can_在某些情况下很有用,但在表需要移动时无助。 –

-2

重命名表意味着重命名同一模式中的表。要重命名的其他模式,DB2调用它的别名:

DB2为

+0

不幸的是,这并没有实际移动表格,它只是创建一个指向它的指针。这在某些情况下可能很有用,但在实际需要移动表时不会起作用。此外,这与现有答案相同。 –

+0

宾果!你是对的 :) – Tom123456

5

创建别名可以轻松地与这一说法重命名表:

RENAME TABLE SCHEMA.TABLENAME TO NEWTABLENAME;