【发布时间】:2012-12-11 05:36:42
【问题描述】:
我正在编写一个 .NET 实用程序,它每小时自动将数据从源表备份到历史表。如果存档表不存在,则必须以编程方式创建它。通常,create db.historytable as db.sourcetable with no data 的 SQL 可以解决问题。但是,create table as 不适用于使用标识列的表。这意味着在运行新的 DDL 之前,您必须获取源表的 DDL,更改表的名称,然后将标识列更改为整数(因为我们不希望历史表使用标识列)。
如果我可以为表中每一列的定义获取列级 DDL,那么我可以使用 DataReader 遍历该 DDL 并重建 DDL。如果 COLUMNTYPE 为 2(2 是标识列),那么我将知道从以下位置修改该列的定义:
ID INTEGER GENERATED BY DEFAULT AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE 0
MAXVALUE 100000000
NO CYCLE)
..只是:
ID INTEGER
我只对作为最后手段的试用感兴趣的其他选项是 1) 使用复杂的正则表达式将标识列定义替换为常规 INTEGER 或 2) 查询 dbc.columns 和 dbc.tables 并使用元数据在那里从头开始构建整个表的 DDL。
基本上,我希望有一些概念上类似于 dbc.columnddl 的东西可以加入到 dbc.columns 中,但我知道,我在这方面做得很远。
【问题讨论】:
-
我使用存储过程复制了 CREATE TABLE 语句,该存储过程使用了几个 DBC 数据字典表。