
初めて投稿致します。
過去ログや他サイトでもいくつかみかけた事象ですが、
どこにもはっきりとした回答がないため質問させて頂きました。
知っている方がいたら、ご教授お願いします。
環境は、Win2003Server + SQL Server2000 です。
外部サーバからisqlで取得したデータをPerlでタブ区切りに加工し、
そのファイルをbcpでDBにインサートする処理でエラーが発生します。
エラー内容は、過去ログにもあったとおり
『文字列データの右側が切り捨てられました』というものです。
1行目からエラーが発生し、10回のエラー発生で異常終了します。
ただ、3万行あるデータを2万行と1万行にしてインサートすれば
問題なくDBに登録されます。
この事象はMicrosoftのバグなんでしょうか?
サイト上には、そのようなバグが報告されていないようですが。
それともどこかに仕様として紹介されているのでしょうか。
データのサイズ、レコード数に関わらず
bcpでインポートできるようにしたいのです。
ちなみに、現行は7.0で問題なく上記処理が稼動しています。
本サイト上に示されていた解決法のODBCバージョンですが、
ODBCは最新版が入ってるので、それ以外でこの事象の解決法を
知っている方がいましたらぜひとも教えてください。
以上、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
・件数次第で成功
・旧SQL-Serverでは成功
という2点で、やはりログファイル的にOKということなので、環境しか考えられないかと・・・
もちろんディスクはFATでフォーマットしてませんよね?
BCPIN最中に、セグメントがギュウギュウになってしまっているとか?
本当にログのフォーマットのせいではないですよね?
>外部サーバからisqlで取得したデータをPerlでタブ区切りに加工し、そのファイルをbcpでDBにインサートする処理でエラー
でも2万と1万に切り分けて成功する。。。
ならば、分割して入れたデータをTAB区切りでBCPOUTしてtruncate、さらにBCPINしても同じところでエラーが出ると思うのですがいかがでしょう?
同じところで出ているのであれば、
3万件のデータがどれほどのサイズであるかを知りたいです。
この回答への補足
>もちろんディスクはFATでフォーマットしてませんよね?
フォーマットはNTFSです。
>本当にログのフォーマットのせいではないですよね?
これはどういうことでしょうか?
ログのフォーマットによって何か起こるということでしょうか??
1050YENさんの言うように、
分割インサートしたデータをbcp outして再度bcp inしても同じ現象がでます。
単純にデータ件数に依存しているようです。
かなり細かくやっていくと、ある件数以上からはエラーが発生するようです。
ちなみにデータのサイズは50M前後です。
よろしくお願いします。
No.3
- 回答日時:
>>本当にログのフォーマットのせいではないですよね?
>これはどういうことでしょうか?
誤記です。すいません。
データのフォーマット(書式)と書きたかったのです。
perlということで、UNIX絡みと思われたので、エンコードやら何やらと思ったのですが、
>分割インサートしたデータをbcp outして再度bcp inしても同じ現象がでます。
ということから、根本のようですね。
私の現業務でSQL-Serverを利用しておりますが、同様な現象が発生しません。
ちなみに
データ:8万件
カラム数:41フィールド
です。
分割インサートしたデータをbcp outする時に、-tオプションを利用せず、-nでやっても一緒ですか?
perlで編集ができる文字ではなくなってしまいますが、それができないのであれば、環境としての根本的な話になってくると思います。
いろいろとお手数かけましたが、解決しました。
結論からいいますと、マイクロソフトのバグでした。
いろいろと調査した結果、英語版のサポートに修正パッチが公開されていて、それを適用で同様のエラーは発生しなくなりました。
ありがとうございました。
また、質問させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLserver算術オーバーフロ...
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
キャッシュを使わずにSELECTを...
-
callで順に実行されるプロシー...
-
ODBCリンクの際にACCESSでは読...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
カーソル定義での条件分岐
-
今日の日付が入った行のデータ...
-
オラクルのデフォルトセッション数
-
PL/SQLカーソルの2重FORループ...
-
データ型について教えてください。
-
テーブルの中身を出力するプロ...
-
SQLで部分的にGROUP BYしたいとき
-
PL/SQLでSPOOLさせたいのですが...
-
WHERE句の実行順序
-
SQL Serverについて
-
Oracle8iでのSQL履歴
-
DBMS_OUTPUT.PUT_LINEを実行し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLserver算術オーバーフロ...
-
bcp in でエラー
-
DBへのOPENについて
-
私は某会社でaccess2003をこれ...
-
SQL : たしかに DELETE したの?
-
VB.net SqlConnectionでの連続S...
-
ACCESSのVBAでCSVを取込処理に...
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
キャッシュを使わずにSELECTを...
-
callで順に実行されるプロシー...
-
sqlplusでヘッダーが付かない
-
ODBCリンクの際にACCESSでは読...
-
PL/SQLカーソルの2重FORループ...
-
Accessの数値から時間に変換す...
-
エクセルVBAでUserFormを起動し...
-
WHERE句の実行順序
-
【Excel VBA】 WorksheetやRa...
-
SQLで部分的にGROUP BYしたいとき
おすすめ情報