これは狂った質問かもしれないと思うし、もし誰かがそれを行う方法の良いアイデアを持っているなら、是非教えてください。DB2テーブルから選択してSQLテーブルに挿入
私は、従業員が従わなければならない会社の基準に照らして、特定のテーブルを検証する仕事中の.Net C#プロジェクトを持っています。テーブルは、SQL ServerまたはDB2上に置くことができます。最初にテーブルがプログラムに追加されると、select文を使用して(SQLの場合)またはsyscat.columns
(db2の場合)を使用してテーブルに関するメタデータ/情報を収集します。そのデータを取得したら、プログラムで検証されたすべてのテーブルについて同じ情報を格納しているSQL Server上にテーブルに格納します(all_table_information
とします)。
テーブルがSQLテーブルであれば、私は(もちろん私が欲しいのテーブルから列だけにそれを制限する)このクエリを実行することができます
insert into [all_table_information]
(table_id, column_name, data_type, max_char_length)
select table_id, column_name, data_type, character_maximum_length
from information_schema.columns
where ...restrict to needed table...
そして、SqlCommandオブジェクトのそれを実行します。しかし、それはDB2テーブルであれば、私は(私は必要な列に再び制限)このクエリを実行する必要があります。
select tabschema, tabname, colname, typename, length
from syscat.columns
where ...restrict to needed table...
そして、それは使用してそれぞれの行を挿入してその結果、ループでDataReaderを取得:
while (dr.Read())
{
insert into [all_table_information]
(table_id, column_name, data_type, max_char_length) values
(..."'" + dr["whatever"] + "', '" + ....)
...execute sql here...
}
dr.Close();
このようにすると動作は遅くなりますが、1つのステートメントでこれを行うにはどうしたらいいのでしょうか?私はあなたもデータテーブルには、db2テーブルの情報を保存することができます知っているが、直接データテーブルに対してクエリを実行することはできますか?
おかげで、 ライアン
このクラスは他のDBには制限があります。 SqlBulkCopyクラスを使用してSQL Serverテーブルにのみデータを書き込むことができます。 – lsalamon
はい、私の理解では、RyanはSqlBulkCopyを使用するためにSQL Serverのデータベーステーブルにすべてを格納したいと考えています。 – Steven
スティーブンが正しいです。これは私が必要とするもののように見えます。ありがとう。 – ryanulit