none
文字列データまたはバイナリ データが切り捨てられます。のエラーについて

    質問

  • はじめまして。上記エラーの原因(回避)について教えていただければうれしいです。

    (環境:SQLServer2008単体)

    M/Fからのデータをテキストファイルを介して取り込むため、一旦、このM/F出力テキストファイルの構成に合わせたtableAにBCPでデータを取り込んだ後、実際にシステムで使用したいtableBに、空白補正をしながら、insert into ~ selectでデータ移行しようとしたところ、

       insert into tableB (a,b,c)  select a,rtim(b),rtim(c) from tableA

    「メッセージ 8152、レベル 16、状態 14、行 1
    文字列データまたはバイナリ データが切り捨てられます。
    ステートメントは終了されました。」

    のエラーがでてしまいました。

    入力しようとしたデータが入力先カラムの設定サイズを超えたときのメッセージのようなのですが、実際にはすべてのカラムについて、入力先(tableB)のサイズを大きく設定しています。

    サイズのほかにどのような原因が考えられるのでしょうか?

    • 編集済み stichfun 2010年10月14日 5:02
    2010年10月14日 3:06

回答

  • 結局、、SET ANSI_DEFAULTS OFFを発行して、警告を無視することにしました。。

    実際にinsertされたデータを確認したところ、切捨てられたデータも特に見あたらなかったので、これで運用することにしました。 ?は残りますが、本件はこれにてクローズしようと思います。

    trapemiya様、NOBTA様、ご回答ありがとうございました。

    • 回答としてマーク stichfun 2010年11月1日 3:08
    2010年11月1日 3:08

すべての返信

  • 例えばchar(10)だと全角で5文字までしか入りませんが、このようなUnicodeではない型がありませんでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年10月14日 4:31
  • trapemiya様

    さっそくご返信くださいまして、ありがとうございます。

    入力データの内容は、全て英数および半角カタカナです。

    また、tableA、taleBとも、今回使用する項目は、全てvarchar(*)での設定です。。

    2010年10月14日 4:50
  • 以下のようなコマンドで、table A に不正な文字が含まれていないかを、確認されてみてはどうでしょう。

    select convert(varbinary(max),a) from tableA

    ちなみに M/F (メイン フレーム) ですよね。 ホストからデータ(文字コード)をコンバートした場合、不正な文字が残ったりして、色々と苦労したことがあります。

    ASCII文字コード
    http://e-words.jp/p/r-ascii.html

    文字コードの基本
    http://itpro.nikkeibp.co.jp/article/lecture/20070209/261534/
     

     

    2010年10月22日 13:34
  • NOBTA様

    ご返信くださいまして、ありがとうございます。不在のため、返信が遅くなり申し訳のないことです。

    お教えいただきましたサイト、とても参考になりました。ありがとうございました。

    それから、select convert(varbinary・・・のコマンドを発行してみました。 バイナリでの結果表示になりましたが、"不正な文字"の判断の仕方がわかっていなくて、、、見方をお教えいただけませんでしょうか?

    2010年10月25日 2:32
  • 例えば、バイナリ文字列の中に、0x00~0x1f などの文字ではないコードが含まれていないかなどをチェックされてはどうでしょう。

    少し、大変だと思いますが、Insert 文で条件を指定し、どのデータでエラーが発生するかをまず確認したほうが良いと思います。

    2010年10月25日 11:41
  • さっそく、確認してみます。 ありがとうございました。

    2010年10月26日 1:46
  • tableAに入れたM/Fからのデータをひととおり見てみましたが、制御文字などにあたるようなコードは混じっていませんでした。 条件を絞って、1行のみを、不正文字がないことを確認したのち、tebaleBへのinsertを試みてみましたが、結果(メッセージ)は同じでした。

    「メッセージ 8152、レベル 16、状態 14、行 1
    文字列データまたはバイナリ データが切り捨てられます。
    ステートメントは終了されました。」

    とりいそぎ、結果をご報告いたします。。

    2010年10月28日 5:21
  • 結局、、SET ANSI_DEFAULTS OFFを発行して、警告を無視することにしました。。

    実際にinsertされたデータを確認したところ、切捨てられたデータも特に見あたらなかったので、これで運用することにしました。 ?は残りますが、本件はこれにてクローズしようと思います。

    trapemiya様、NOBTA様、ご回答ありがとうございました。

    • 回答としてマーク stichfun 2010年11月1日 3:08
    2010年11月1日 3:08