我正在编写一个 .NET 实用程序,它每小时自动将数据从源表备份到历史表。如果存档表不存在,则必须以编程方式创建它。通常,SQLcreate db.historytable as db.sourcetable with no data
可以解决问题。但是,create table as
不适用于使用标识列的表。这意味着在运行新的 DDL 之前,您必须获取源表的 DDL,更改表的名称,然后将标识列更改为整数(因为我们不希望历史表使用标识列)。
如果我可以为表中每一列的定义获得列级 DDL,那么我可以使用 DataReader 遍历它并重建 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,但我知道,我对此做了很长的尝试。