- PR -

DTSを使ったCSVファイル取込みについて

1
投稿者投稿内容
eich2509
会議室デビュー日: 2007/03/06
投稿数: 13
投稿日時: 2007-07-19 12:43
いつもお世話になっています。

DTSを使ってCSVファイルを取り込みたいと考えています。
データ変換タスクを利用して、
事前にCSVファイルのデータチェック(Lengthや型チェック)を行い、
チェックOKのデータはテーブルへインポートし
チェックNGのデータはエラー用のCSVファイルに書き込むような処理をしたいのですが・・

この一連の処理をDTSを使って行なうことは可能でしょうか?

また上記のデータチェックはデータ変換タスクのActiveXスクリプトを使うことで
実現できるのでしょうか?

方法をご存知の方がいらっしゃいましたら宜しくお願いします。

環境:SQLServer2000
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-07-19 14:14
試してはいないですけど・・・。
引用:

事前にCSVファイルのデータチェック(Lengthや型チェック)を行い、


変換タブで変換の矢印を右クリックすると"フラグ"ってのが出てきます。そこでデータ型チェックの方法を選択することができそうです。固有のチェックが必要な場合はActiveXスクリプトでやるしかないと思います。照合タブを使えば、データベースにクエリしつつチェックなんてこともできます。

引用:

チェックNGのデータはエラー用のCSVファイルに書き込むような処理をしたいのですが・・


オプションタブに例外ファイルって欄があるので、それ使えないでしょうか?ファイルの種類で"転送元エラー行"あたりを選べばいいような気がします。

引用:

また上記のデータチェックはデータ変換タスクのActiveXスクリプトを使うことで
実現できるのでしょうか?


データ変換タスクでは変換の種類のデフォルトは"Copy Column"だと思うので、それは削除して、"ActiveX Script"の変換を新規で作るかんじになると思います。Scriptでチェックした結果その行がエラーなのであれば、DTSTransformStat_Error定数を戻してやれば例外ファイルの方に出力されそうですが。

DTSの定数の意味は Books Online に出てるので、どうゆう動きをするのか確認してみてください。
eich2509
会議室デビュー日: 2007/03/06
投稿数: 13
投稿日時: 2007-07-19 17:21
かめたろさま、迅速な回答どうもありがとうございます。

引用:

オプションタブに例外ファイルって欄があるので、それ使えないでしょうか?ファイルの種類で"転送元エラー行"あたりを選べばいいような気がします。

データ変換タスクでは変換の種類のデフォルトは"Copy Column"だと思うので、それは削除して、"ActiveX Script"の変換を新規で作るかんじになると思います。Scriptでチェックした結果その行がエラーなのであれば、DTSTransformStat_Error定数を戻してやれば例外ファイルの方に出力されそうですが。



データチェックはActiveXスクリプトで行なうことにしました。
チェックNGの時にDTSTransformStat_xxxxを戻す処理ですが、
DTSTransformStat_SkipRowInfo(この行の処理を終了し、情報を使用して ErrorSink を呼び出します。)
を戻すと、チェックOKのデータはテーブルに入りますがチェックNGのデータが例外ファイルに書き込まれません。
また、
DTSTransformStat_ExceptionRow(例外としてこの行の処理を終了してエラー シンクを呼び出し、例外ファイルにこの行を書き込みます。)
を戻すと、チェックNGのデータは例外ファイルに書き込まれますがチェックOKのデータがテーブルに入りません。

他のDTSTransformStat_xxxを使っていろいろと試してみているのですが、
実現したい形には至っていません。
引き続き、何か良いアドバイスがありましたら宜しくお願いします。


[ メッセージ編集済み 編集者: eich2509 編集日時 2007-07-19 17:26 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-07-20 10:44
簡単なのを作って試してみました。
引用:

DTSTransformStat_ExceptionRow(例外としてこの行の処理を終了してエラー シンクを呼び出し、例外ファイルにこの行を書き込みます。)
を戻すと、チェックNGのデータは例外ファイルに書き込まれますがチェックOKのデータがテーブルに入りません。


当方ではそのようなことはありませんでした。
DTSTransformStat_Errorの場合と同じ結果を得ました。この定数、どう違うのかは分かりませんが・・・。
うーん何でだろ。トランザクション操作のオプションが違うのかなぁ。

---追記---------
"オプション"タブの"最大エラー数"はゼロのままになってないですか?ゼロのままだと1回目のエラーで処理が中断されちゃいます。最大値は9999。変換元データに当然のようにエラーが含まれるような場合は、ここが要件に合わないかもしれませんね。

[ メッセージ編集済み 編集者: かめたろ 編集日時 2007-07-20 11:00 ]
eich2509
会議室デビュー日: 2007/03/06
投稿数: 13
投稿日時: 2007-07-20 15:04
引用:

---追記---------
"オプション"タブの"最大エラー数"はゼロのままになってないですか?ゼロのままだと1回目のエラーで処理が中断されちゃいます。最大値は9999。変換元データに当然のようにエラーが含まれるような場合は、ここが要件に合わないかもしれませんね。



すみません、、
まさしく追記でおっしゃっているとおりゼロのままでした。

わざわざ動作確認までしていただいたようで、本当にありがとうございます。
実現したい形に持っていくことができました!!!
1

スキルアップ/キャリアアップ(JOB@IT)