2009年12月1日火曜日

Windows PowerShellにて、Shift JIS形式のCSVファイルをSQL-Server2008へ送り込む処理(1)

今回の記事は、Windows Power Shell V2と、SQL-Server 2008の連について書かせていただきたいと思います。

Windows Power Shellは.NET Frameworkと一体化しているため、同じく一体化しているADO.NETを経由して、SQL-Serverをも自分の機能のように扱う事が出来てしまいます

せっかくなので、Shift JIS形式のCSVデータを読み込み、SQL-Server 2008にテーブルとして送り込む関数を作ってみることにします。

なぜShift JIS形式かというと、確かにWindowsがUnicodeを導入して久しいですが、実のところ、WindowsにおけるテキストファイルはまだまだShift JIS形式が多かったりします。

仕事やプライベートでも、Shift JIS形式のCSVファイルの取り扱いって、どうしても避けては通れないなぁと感じています。
Windows Power Shellには、CSVを読み込むImport-CSVというコマンドがあるのですが、Unicodeしか対応していないため、Shift JIS形式の日本語は文字化けしてしまって使えません。拡張子も限定されるし、やっぱり自分で作らないとだめかなぁと。

SQL-Server 2008側と言えば、こっちはこっちで、OpenRowSet()関数を使えば直接CSV(.TXT拡張子でなければなりませんが)ファイルやExcelワークシートをテーブルとして開く事が出来るのですが、以前の記事でも書かせていただいたのですけれど、64bitのWindows7 + 64bitのSQL-Server 2008では、それを実現するためのキープレイヤーとなる「MICROSOFT.JETOLEDB.4.0プロバイダ」が64bit非対応のために使えず、直接CSVやExcelワークシートをテーブルとして読み込む事が出来ないのでした。

なぜ64bitは、CSVの取り扱いの敷居がこんなにも高い謎

Shift JIS形式のCSVが扱えれば、ExcelワークシートもCSVに変換してから使えるし、色々と応用が利くかなぁと。

手順はこうです。
(1)Shift JIS形式のCSVファイルをオブジェクトに読み込む。
(2)読み込んだオブジェクトから、SQL-Server 2008の一時テーブル作成クエリーを作る。
(3)読み込んだオブジェクトから、SQL-Server 2008の一時テーブルにデータ挿入するクエリーを作る。
(4)SQL-Server 2008に接続し、作ったクエリーを実行する。
(5)送り込まれたデータをSQL-Server 2008側で利用する。

手順は、複数の関数に分けて作りこんでみました。

実行すると、無事にCSVファイルがSQL-Server 2008に送り込まれました。
中身のコードは次回に掲載させていただきます。