SQLServerのINSERTで『文字列データまたはバイナリ データが切り捨てられます』とエラーがでる件

こんちにはmorimoriです。

SQLServerのストアドプロシージャの保守をしていて、タイトルにある『文字列データまたはバイナリ データが切り捨てられます』とエラーが出てはまったのでメモしておきます。何か参考になれば幸いです。

状況としては、ストアドプロシージャ内の一部分で、SELECTしたデータと直接INSERTしている箇所です。

エラーメッセージを見れば、登録先のテーブルカラムのサイズが登録値より小さいために発生しているであろうことが想像できます。

しかし、登録先のカラムのサイズを確認するうとvarchar(20)となっていて、登録値は半角6文字しかありませんでした。データをテキストにコピペしてみても、後ろにブランクは入っていませんでした。

まさかと思ってSELECT元のテーブルカラムサイズを確認するとvarchar(22)となっており、サイズを変更するとエラーは発生しませんでした。別の環境で再度確認してみましたが、こちらでは登録先のテーブルカラムサイズが小さくても、登録データがサイズ範囲内であれば問題なく登録できました。

現状、原因は不明ですが、実行プランによって変わるとの情報もネット上であったため、それが原因なのかもしれません。もしかしたら設定であるのかな?

原因が分からず困っている方がいたら、元のテーブルサイズも確認して見て下さい。