ストリームベースのDB変換ツール(2)

DbStreamConverterを使ったデータ変換ですが、簡単に手順を紹介します。

準備

まずはデータベースの用意が必要です。ここではNorthwindを利用します。手順は単純なので別に他のDBでも構いません。データベースが用意できたら、転送用のテーブルを作ります。以下のコマンドを実行します。もちろん別DBへの変換も可能ですが、とりあえず動作を確認するためには同じDBがお手軽なので。

select * into work from [Order Details] where 1=0

変換ルールの作成

準備ができたらダウンロードしたDbStreamConverter.exeを実行します。EXEとViewMakerのDLLの2つで構成されています。

次にデータベースの接続文字列を指定します。Source Connection String(変換元DBの接続先)とTarget Connection String(変換先DBの接続先)にデータベースの接続文字列を指定します。今回用意したNorthwindへの接続文字列を指定します。ローカルのSQLEXPRESSを利用しているのであれば以下のような接続文字列になります。

Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True

今回は1つのデータベース内で処理しますので両方同じ接続文字列を指定します。

データベースを指定すると自動的にテーブル・ビューの一覧が選択可能になります。変換するテーブルを選択します。今期は、Source Tableには変換元テーブルである Order Details、Target Tableには変換先テーブルのworkを指定します。Newを実行すると選択したテーブル間の変換処理が作成されます。

変換処理を実行

2つのテーブル間の変換ルールの指定は、基本的には変換先のカラム(Target Column)に対して変換元のカラム(Source Column)を指定します。今回は同じ構造のテーブルを利用しており、既定で同じ名前のカラムを自動的にマッピングしてくれるので、Executeをクリックすると転送処理が実行できます。

見ての通り簡単に利用できるのですが、これでは単なる転送処理なので、計算処理する変換ルールを追加します。ExpressionにはTargetColumnの変換ルールをC#で記述することができます。変換元のデータはSで参照できるので以下のような式を記述すると小計の1%をDiscountに追加して変換を行うことができます。このときTarget Truncateをチェックすると実行前に転送先のテーブルをクリア(Truncate)します。

S.Discount + ((float)S.UnitPrice * S.Quantity)*0.01

もう少し複雑なビジネスルールを利用したい場合は、メニューConvertからEdit RuleSetを選択します。そうするとWFのRuleSetエディターが起動するのでルールを記述します。

ルールの設定が完了すれば、実行して変換されるか確認します。設定した変換処理はメニューのFile-Saveで保存できます。保存したファイルは読み出すことも可能ですがコマンドラインから実行することも可能になります。