トップ回答者
SQL Server 2008のbcpで日付データ(yy/mm/dd)を取込むとmm/dd/yyと認識される

質問
-
SQL Serverを2000から2008へバージョンアップしました。
2000のbcp バージョン: 9.00.4035.00で取込めていた日付データが、
2008のbcp バージョン: 10.0.1600.22で日付の認識がうまくできません。
-Rや-Vオプションを付けたり、サーバの「地域と言語」の日付(短い形式)をyy/mm/ddに変更して試しましたが、うまくいきませんでした。
バッチ数やcsvのデータ量が多いので、そちらに変更加えることなく、どこかの設定変更だけで対応したいのですが、どなたかわかる方いらっしゃいませんでしょうか。
csv
・・・,09/12/01,・・・
↓
取込んだテーブルデータ
2001-09-12
Windows Server 2008 R2 x64
SQL Server 2008 SP1 CU5 (10.0.2746.0 (X64))
回答
-
こんにちは、nagino です。2008 はバージョンを見ると RTM(SP や CU を未適用) でしょうか。ちょっと確証はありませんが、下記不具合が影響(-R オプションを無視して英語ロケールとして日付を解釈)しているように見受けられます。SP1 CU4 以上で当該不具合の修正プログラムが含まれていますので、SP1 と CU4 を適用して再度確認してみてください。http://support.microsoft.com/kb/973602/ (SP1 用 CU4)あと、BCP は 使用しているログインの既定の言語も影響するようですので、そちらもあわせて確認してみてください。ただ、やはり日付は解釈が一意の形式を使うことがお勧めです。ISO 8601 形式が国際標準で日本人にもなじみやすい形式ですので、機会があればそちらへの移行も検討してみてください。BCP にかける前にテキスト処理のバッチを噛ませて、形式を変換するという手もあります。
MCITP(Database Developer/Database Administrator)- 回答としてマーク 菊地俊介 2010年1月26日 9:24
すべての返信
-
こんにちは、nagino です。2008 はバージョンを見ると RTM(SP や CU を未適用) でしょうか。ちょっと確証はありませんが、下記不具合が影響(-R オプションを無視して英語ロケールとして日付を解釈)しているように見受けられます。SP1 CU4 以上で当該不具合の修正プログラムが含まれていますので、SP1 と CU4 を適用して再度確認してみてください。http://support.microsoft.com/kb/973602/ (SP1 用 CU4)あと、BCP は 使用しているログインの既定の言語も影響するようですので、そちらもあわせて確認してみてください。ただ、やはり日付は解釈が一意の形式を使うことがお勧めです。ISO 8601 形式が国際標準で日本人にもなじみやすい形式ですので、機会があればそちらへの移行も検討してみてください。BCP にかける前にテキスト処理のバッチを噛ませて、形式を変換するという手もあります。
MCITP(Database Developer/Database Administrator)- 回答としてマーク 菊地俊介 2010年1月26日 9:24
-
nagino 様
色々とありがとうございました。
解決しました。
bcp実行の際、32bit版の(古い?)exeが利用されておりました。
PATHが32bitフォルダ、64bitフォルダに通っているので
32bit版のbcp.exeを削除し、実行したところ64bit版のbcp.exeが利用され正常に取り込めました。
======================
Win 2008 R2 + SQL Server 2008 SP1 CU6の環境をもう一つ作成してそちらで取り込んだところOKでしたので
OSの問題でもないということで、いろいろ調べたところ
NGになる環境の場合、bcp実行時にタスクマネージャで確認したところ
bcpが32bit版のもの(32bitフォルダにある)を利用しておりました。
~(x86)\100\Tools\Binn/bcp.exe
ファイルバージョン 2007.100.1600.22
製品バージョン 10.0.1600.22
更新日 2008/07/10 16:34
64bit版のbcpも格納されていたので
~\100\Tools\Binn
ファイルバージョン 2007.100.2757.0
製品バージョン 10.0.2757.0
更新日 2010/01/09 11:34
32bit版のbcp.exeを削除して、再取込みしたところOKになりました。
そもそも他の64bit機の32bitフォルダには、bcp.exeが入っていないようなので
なぜNGになる環境に紛れ込んでいたのか、入れてしまったのか?分からないのですが
解決して良かったです。
ありがとうございました。