今回の記事は、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に送り込まれました。
中身のコードは次回に掲載させていただきます。