ソース テーブルから履歴テーブルにデータを 1 時間ごとに自動的にバックアップする .NET ユーティリティを作成しています。アーカイブ テーブルが存在しない場合は、プログラムで作成する必要があります。通常は、の SQL でcreate db.historytable as db.sourcetable with no dataうまくいきます。ただし、create table asID 列を使用するテーブルでは機能しません。これは、新しい DDL を実行する前に、ソース テーブルの DDL を取得し、テーブルの名前を変更してから、ID 列を整数に変更する必要があることを意味します (履歴テーブルで ID 列を使用したくないため)。
テーブル内の各列の定義に対して列レベルの DDL を取得できれば、DataReader を使用してそれを反復処理し、DDL を再構築できます。COLUMNTYPE が 2 (2 は ID 列) の場合、その列の定義を次のように変更する必要があることがわかります。
ID INTEGER GENERATED BY DEFAULT AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE 0
MAXVALUE 100000000
NO CYCLE)
..単に:
ID INTEGER
私が最後の手段として試してみることだけに興味がある他のオプションは、1) 複雑な正規表現を使用して ID 列の定義を通常の INTEGER に置き換えるか、2) dbc.columns と dbc.tables をクエリし、そこのメタデータを使用して構築することです。テーブル全体の DDL をゼロから作成します。
基本的に、概念的には dbc.columns に結合できる dbc.columnddl のようなものがあることを望んでいますが、それについては長い目で見ています。