none
SQL Server 2008のbcpで日付データ(yy/mm/dd)を取込むとmm/dd/yyと認識される RRS feed

  • 質問

  • 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))
    2009年12月28日 2:05

回答

すべての返信

  • 関係ありそうなSQL Server上の現在の設定です。
    サーバのプロパティ
    既定のフルテキスト言語 1041
    既定の言語       Japanese

    bcpに使用しているユーザのプロパティ
    既定の言語       Japanese
    2009年12月28日 5:03
  • こんにちは、nagino です。

    2008 はバージョンを見ると RTM(SP や CU を未適用) でしょうか。
    ちょっと確証はありませんが、下記不具合が影響(-R オプションを無視して英語ロケールとして日付を解釈)しているように見受けられます。

    SP1 CU4 以上で当該不具合の修正プログラムが含まれていますので、SP1 と CU4 を適用して再度確認してみてください。

    あと、BCP は 使用しているログインの既定の言語も影響するようですので、そちらもあわせて確認してみてください。



    ただ、やはり日付は解釈が一意の形式を使うことがお勧めです。
    ISO 8601 形式が国際標準で日本人にもなじみやすい形式ですので、機会があればそちらへの移行も検討してみてください。

    BCP にかける前にテキスト処理のバッチを噛ませて、形式を変換するという手もあります。


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク 菊地俊介 2010年1月26日 9:24
    2010年1月12日 11:54
  • 皆様、こんにちは。

    naginoさん、詳しい回答ありがとうございます。

    tyuntyunさん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか。 日付認識の問題は解決しましたか?
    有用な情報と思われたため、naginoさんの回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    2010年1月26日 9:26

  • nagino様

    お返事遅れました。
    ご回答ありがとうございます。

    2008にSP1 CU5を適用しております。

    BCPのアカウントは、saやその他のSQLServerのユーザで試しましたがうまくいきませんでした。
    既定の言語は 「Japanese」になっております。

    結局、バッチをはさんで取込むようにしました。

    >2000のbcp バージョン: 9.00.4035.00で取込めていた日付データが
    あと、以前取り込めていたバージョンは、2005のbcpでした。
    2010年2月2日 9:15
  • 2008にSP1 CU6が出ていたので、適用して試しましたがやはり同様にダメでした。
    OSがWindows Server 2008 R2 Standardなのでこの辺が影響しているのかもしれません。

    試しにWindows Server 2008 Standard (R2無し)のSQL Server 2008環境で試したところ、「10/02/01」でも「2010/02/01」と認識されました。
    2010年2月3日 2:18
  • こんにちは、nagino です。

    OS の影響を受ける可能性はありますね。
    Win 2008 R2 でのみ挙動が異なるのであれば、不具合のような気がします。
    ただ、確認するには Windows のバージョンや SP と SQL Server のバージョンの組み合わせ毎に比較する必要があるので、環境構築だけでも大変ですが・・・。


    MCITP(Database Developer/Database Administrator)
    2010年2月3日 3:23
  • 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になる環境に紛れ込んでいたのか、入れてしまったのか?分からないのですが
    解決して良かったです。
    ありがとうございました。
    2010年2月3日 10:53