SQL ServerにCSVファイル or Excelファイルからデータをインポートする際に注意(NOT NULLと改行)すること。
SQL Serverで開発システムの場合、テスト環境を構築する際に手っ取り早くデータをいれるときはManagement Studioのデータインポート機能を使うと思います。
そこで久々に使ったんですけど、ちょっとはまったので今後も忘れないように記録しておきます。
たいていは設計時にねたをExcelにまとめていると思うのでそこからデータインポートすると思います。
その際、Excelをそのまま入れるかCSV(フラットファイル)にして入れるかでそれぞれ注意するべきところが違うことが分かりました。
Excelファイルをインポート
NOT NULLの項目にはそのまま入らない。
varcharなどでNOT NULL制約があるカラムに対してExcelのセルが空欄のままだとNULLをいれるようとしてこけます。
この場合、空欄セルにデータで使われていない文字(★など)をいれといて入れた後にupdateで空文字にしましょう。
以下のようなSQLです。
update hogehoge set col = '' where col = '★'
セルに改行があるとそのまま入らない。
セル内に改行があると失敗します。
この場合、Excelで改行をまずデータで使われていない文字(■など)に置換して入れた後に改行に置換します。
Excelの改行コードは置換のときにCtrl+Jキーを押すと入力できます。見えませんけど。
以下のようなSQLです。
update hogehoge set col = replace(col, '■', CHAR(13) + CHAR(10))
CSVに比べてエラーメッセージが不親切
な気がします。なのでエラーメッセージが何を言っているかわからない場合はCSVインポートに切り替えてみるのも一つの手です。
CSVでもそれほど親切なエラーメッセージはでませんが。
CSVファイルをインポート
セルに改行があるとそのまま入らない。
CSVでもこれは同じです。
50文字以上ある場合そのまま入らない。
1項目が50文字以上あるはCSV取り込み時の詳細設定で文字数を変更する必要があります。
なぜかデフォルトすべて50になってました。
これに気付かずにテーブルより桁数が少ないのに切り捨てましたみたいなエラーがでてはまりました。
まとめ
上記のような感じなのでおすすめは50文字以上のデータがあるテーブルはExcelで、それ以外はCSVで試して最終的にだめならCSVでエラーをつぶす。ですがね。
ちなみにこれはSQL Server 2008*1の場合ですので最近のバージョンだと違うかもしれません。というか改善されていてほしい。
*1:なんでこんな10年前ほどのバージョンを使っているかというと顧客指定だからです
JenkinsでビルドしてCheckstyleでエラーになることがあることを初めて知った日。
Javaで開発していてJenkinsでビルドを自動化している環境ならついでにCheckstyleで静的解析でもしておくかーみたいな感じで、 ついてくると思います。
仕事で提供されたJenkinsの環境もその一つでした。
で、いままでJenkinsのビルドが通っていたのにあるプルリクエストをマージしてから失敗するようになりました。
原因を見るとCheckstyleのところでfailとでている。
Checkstyleでfail???
僕みたいなにわかJava使いはCheckstyleは静的解析して警告だけ出してくれるものと思ってたのでこのエラーは意味不明でした。
これを機に調べるとCheckstyleもレベルがあって"error"と"warning"と"info"があるみたいですね。
Javaのプロジェクト結構やってますが、初めて知りました。
だいたいCheckstyleの定義ファイルは上から降ってきますからね。新規開発でも過去のを流用したり。
定義ファイルまで書けるようになる必要はないでしょう。
なので僕みたいにCheckstyleをなんとなく使っているひとはCheckstyleにはレベルがあり、CIでエラーにすることもできる。とだけ覚えておきましょう。
ちなみに今回の件は、JavaでよくやりがちなStringを==比較しているのがerrorレベルでした。修正したら通るようになりました。
僕がコーディングしたわけではないですが、.NETerはやっちゃいますよね。気持ちはわかります。
SourceTree v1.9以降のバージョンをアカウント登録せずに使用する方法。
会社でGitを使ったプロジェクトをやっており、慣れ親しんだSourceTree(v1.9.6)をいれるかーと思って、インストールして起動し、ウィザードを進めていくと以下の画面が出現。
家だったら自分のアカウントでログインするけど客先のネットワークだし、変にログインはしないでおこうと思ってスキップを探すけどスキップするところがない。どっちのボタンを押しても先に進めない。
あーウィザードを閉じればいいのかと思って閉じるとSourceTreeが起動しない。
もしや…と思って調べてみるとv1.8.2あたりで登録が必須となったらしい。
回避方法としてライセンスファイルみたいなのをどこかに配置すればできるっぽいって書いてあったけど、客先のネットワークにファイルを持ってくるのが面倒なのでパス。
昔使ってたv1.4とかはまったくそんな必要なかったのになー。
じゃあ、旧バージョンでも使うかということで公式サイトを探すけど、ダウンロードできるようなところがない。
怪しいサイトには旧バージョンがあるけど、会社(しかも客先)のマシンにいれてウイルスでも検出されたら大惨事になるので、とても怖くてできない。
ググって以下の記事内にダウンロード先を発見した。
URLを見るとAtlassianのサーバっぽいので安全みたい。
というわけで、SourceTree v1.9以降のバージョンをアカウント登録せずに使用する方法はないので、旧バージョン(v1.7.0)を使用するしかないです。
旧バージョンで一番新しそうなv1.7.0のダウンロードは以下からできますが、そのうち消えるリスクもあるので客先ネットワーク、オフライン環境等で使用する予定のある方はダウンロードしておいたほうがいいかも。
https://downloads.atlassian.com/software/sourcetree/windows/SourceTreeSetup_1.7.0.32509.exe
v1.7.0は最新版とはインタフェースは異なるものの主要な操作はできるのでまったくもって問題ないです。そしてそんなに古くないです。(2015年くらいやと思う)
2016/11/26 追記
しばらくそのまま使えてたんですけど、30日を過ぎたあたりで使用を続けるには登録してくださいというようなメッセージが表示されて使えなくなりました。
なので上記の方法で使えるのは30日間限定になります。
その後は別の環境でAttlassianにログインして「New SourceTree License」をクリックしてライセンスファイルをダウンロードして、インポートすることで実行する環境ではログインせずに継続して使えるようになりました。