2012-07-19 161 views
9

bcpで作業中にエラーが発生しました。 ここにエラーがあります。bcp:エラー= [Microsoft] [SQL Serverネイティブクライアント10.0]文字列データ、右切り捨て

SQLSTATE = 22001、NativeErrorに= 0エラー= [Microsoft]の[SQL Serverの ネイティブクライアント10.0]文字列データ、右切り捨て

私は、ステージング表にデータを解凍しようとしていますいかなる制約もなく、データ型はデータと比較してかなり大きい。私はbcp'dされている異なるテーブルから約11ファイルを持っていますが、1つのファイルをアンパックする際にエラーが出ています。 これは私がうまく使用しているコマンドです。非常に最近(現在のWHのコピーを作成してプロセスを設定しようとするとき)、私は問題に直面していました。

bcp.exeのemployee_detailsでemployee_details.dat -n -E -S "サーバー名" -U saの-P "パスワード"

私は、-C -Tにコマンドを変更しようとしました - 私が手動でフォーマットを与えたときに働いたSです。これは私のWHにロードする必要がある非常に大きくて重要なパケットです。
ここでフォーマットファイルが表示されるかどうかわかりません。 ヘルプが必要です。

ありがとう

シナモンガール。

+0

もっと具体的にお願いできますか? 「かなり大きい」とはどういう意味ですか?あなたは、テーブル定義の実際のCREATE TABLEとファイルからの長い行のサンプルを表示できますか? –

+0

まあ、アーロン、申し訳ありませんが、私のファイルは、交通量やピーク時間に応じて、約1000 KBから800000 KBの間で十分です。私のテーブルには、アイデンティティ列であり、intとfloatの間に分布するいくつかの他の列であるepoch_time(bigint)、server_id(varchar)、uid_rl(int)、apl(int)などのサンプル列があります。おかげでシナモンの女の子 –

+0

私はファイル全体、または 'varchar' - ' varchar(what) 'のようなあいまいなものを見ることを求めていませんか?入力はどのように見えますか?列には大きすぎる値を少なくとも1つ詰め込もうとしている曖昧なエラーメッセージが表示されますが、テーブル定義を教えたり、その原因となるデータを表示したりすることはありません。どのように私たちが助けてくれると思いますか?あなたのファイルをプリントアウトし、ダーツボードに置いてダーツを投げると、問題の原因となっている値が表示されます。それがあなたのために私たちに求めていることです。 –

答えて

2

bcp右の切り捨てエラーは、1列に収まるデータが多すぎる場合に発生します。 これは、不適切な形式ファイル(使用されている場合)または区切り記号によって引き起こされる可能性があります。 ラインターミネータ(WindowsにはCRLFまたは '\ r \ n'があり、UNIXには '\ n'が付いています)でもこのエラーが発生する可能性があります。例書式ファイルにはWindows CRLFが含まれています。つまり行終端文字として '\ r \ n'が含まれていますが、ファイルには行末として '\ n'が含まれています。これは、ファイル全体を1行(むしろ1列)に収めることを意味し、右の切り捨てエラーにつながります。

+0

私はあなたの分析を本当に理解していません。しかし、改行の言及に+1。私の場合、BCPが本当に好きではないデータに改行文字がありました。 – Richard

3

アップロードしようとしていたファイルがANSI形式ではなくUnicode形式であることが判明しました。

-Nスイッチがありますが、テーブルにはNVARCHARデータがありませんでした。

私達はちょうどANSI形式でファイルを保存し、それが働いていますが、NVARCHARデータを持っているか、あなたは-Nスイッチを使用する必要がある可能性がある場合

は++メモ帳でファイルTechNet - Using Unicode Native Format to Import or Export Data

+0

良い!私はANSIとして保存されたCSVファイルを使用してインポートすることができました...しかし、ファイルのある時点で切り捨てエラーが発生しました...また、BCPを使用している間に二重引用符を取り除くことはできません.... –

+0

@PauloHenrique申し訳ありませんが解決策はありません。デリミタを変更して、ステージングテーブルのフィールドを処理することができます。最近、私はちょうど.Net DataSetにデータをロードしていて、ストアドプロシージャにUser Defined Table Typeとして渡していますが、柔軟性はあまりありません。また、タイプが変更されたときにタイプ名の順序を決定することになります。それはより複雑ですが、トラブルシューティングが容易です。私はちょうどXMLの文字列を作成し、格納されたprocでそれを解析するアドホックなもののために、しかし時々データの変換がたくさんある場合トラブルシューティングする。 –

0

開く]を参照してください。 「表示」タブ→「シンボルを表示」→「すべての文字を表示」に進みます。私も.tsvファイルの同じ問題に直面していました。一つのタブが間違っていました。

12

また、BCPの実行中に同じ問題が発生し、.datファイルの改行文字に問題があることが判明しました。

ファイルをメモ帳++で表示し、「すべての文字を表示」をクリックすると、改行文字が表示されます。

File with LineFeed character

BCP、すなわち "\ R \ n" はオプション-rと、次のエラーをスローコマンド以下

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\r\n" -S "DBServerName" -T -E 

"SQLSTATE = 22001、NativeErrorに= 0エラー= [Microsoft]の[SQL Serverの ネイティブクライアント10.0]文字列データ、右切り捨て"

BCPでのすべての行を扱います我々はトンを使用したときに-r「\ nを」またはコマンドの下で、すなわち、-r「\ rを」オプションを使用して、単一の行としてファイル

bcp dbo.Test in C:\Test.dat -c -t "|" -r "\n" -S "DBServerName" -T -E 

問題が解決されましたBCPコマンドで改行文字

bcp dbo.Test in C:\Test.dat -c -t "|" -r "0x0a" -S "DBServerName" -T -E 
+0

私のcsvはLinux/PHPで作成され、戻り文字として "LF"があり、 '-r"を使用して0x0a "'が私のために働いた! –

+0

それがあなたを助けてくれたことを知っておいてよかったです。 –

+0

@MayankJha UNIX EOL文字でもファイルが読み込まれませんでしたが、改行文字として16進値が使用されました.-ブリリアント – Ali

0

のための彼Haxadecimal値(0x0Aの)私は、これは古いです知っている - しかし、私はちょうど私はこのエラーを取得した場合に出くわし、私の数値フィールドのいずれかを判明にはより多くを持っていましたスキーマによって許可された小数点以下桁数。

2

切り詰めメッセージも表示されていました。何時間もフォーラムを検索し、提案された解決策を試してみた結果、ついに私は仕事に就きました。

切り詰めメッセージが表示されるのは、実際にはフォーマットファイルに列名を置くことが実際に重要だと思うほどだと思ったからです。これは、データがロードされる場所を指示する先行する数値です。

私の入力ファイルには、テーブルの3番目の列のデータがありませんでした。これが私のフォーマットファイルの見方です。テーブルには、私は、データが行くだろう形式のファイルに列名を与えることが想定のだ

Cust_Name Varchar(20) 
Cust_Ref Varchar(10) 
Cust_Type Varchar(3) 
Cust_amount Decimal(10,2) 
Cust_Notes Varchar (50) 
Cust_Tel Varchar(15) 
Cust...... 

のように見えた

Jones,ABC123,200.67,New phone 
Smith,XYZ564,10.23,New SIM 

... "," 1 Cust_Name  SQL_Latin1... 
... "," 2 Cust_Ref  SQL_Latin1... 
... "," 3 Cust_Amount  SQL_Latin1... 
... "\r\n" 4 Cust_notes SQL_Latin1... 

私の入力ファイルは、このように見えましたテーブルの適切な列に追加します。

これは、列番号が重要で列名がノイズであるため機能します。

... "," 1 A  SQL_Latin1... 
... "," 2 B  SQL_Latin1... 
... "," 4 C  SQL_Latin1... 
... "\r\n" 5 D  SQL_Latin1... 
関連する問題