2017-10-09 242 views
0

を失敗し、このエラーメッセージました:SQL Serverの:BULK INSERTが、私はprocStockで一括挿入を使用IID_IColumnsInfo

メッセージ4866、レベル16、状態8、行2
一括読み込みに失敗しました。行1、列1のデータファイルで列が長すぎます。フィールドターミネータと行ターミネータが正しく指定されていることを確認してください。メッセージ7301

、レベル16、状態2、行2
は、OLE DBプロバイダリンクサーバー "BULK" "(ヌル)" から必要なインターフェース( "IID_IColumnsInfo")を取得できません。

私はStackで投稿を探し、ROWTERMINATOR = '0x0a'を使用するための解決策のアドバイスを見つけましたが、私はまだ同じエラーがあります。

SET @sir_de_executat = ' 
    BULK INSERT #test 
    FROM ''d:\scripts\test.csv'' 
    WITH (
     FIRSTROW=2 
     , FORMATFILE=''d:\scripts\aaa2.fmt'' 
     , FIELDTERMINATOR = '';'' 
     , ROWTERMINATOR = ''0x0a'' 
    )' 

ありがとうございました。ここで

ここでは、CSVサンプル

BPARTNER;ME_TITLE_0208;BP_LSTNAME_0209;BP_FSTNAME_0210;STR_SUPPL1_0211;STR_SUPPL2_0212;HOUSE_NUM1_0213;HOUSE_NUM2_0214;STREET60_0215;STR_SUPPL4_0216;POSTALCODE_0217;CITY_1_0218;TEL_NUMBER_0219;FAX_NUMBER_0220;ZCHASSNR;ZFAHRZEUG__ZBRAND;ZFAHRZEUG__ZMODELKEY;ZFAHRZEUG__ZFISCHP;ZFAHRZEUG__ZMOTRVAR;ZFAHRZEUG__ZZULASSG;ZCREGDAT;/BIC/ZDDEALER;/BIC/Z_REGRNO_0124;ZFAHRZEUG__ZMOTR_KB4;ZFAHRZEUG__ZMODJAHR 
6016562635;0002;FOO;BAR;;;823;;RUE DE LA SOUTE;;60400;CUTS;;;AZEZZZ8U0HR067422;AU;8UGBGY;0008;D;20170803;20170803;FRAA01612;EP-803-RP;DFTA;2017 

あるFMT形式のファイルが

ある
10.0 
25 
1  SQLCHAR    0  20  "\t"  1  bpartner            SQL_Latin1_General_CP1_CI_AS 
2  SQLCHAR    0  30  "\t"  2  title             SQL_Latin1_General_CP1_CI_AS 
3  SQLCHAR    0  256  "\t"  3  last_name            SQL_Latin1_General_CP1_CI_AS 
4  SQLCHAR    0  256  "\t"  4  first_name            SQL_Latin1_General_CP1_CI_AS 
5  SQLCHAR    0  256  "\t"  5  street2            SQL_Latin1_General_CP1_CI_AS 
6  SQLCHAR    0  256  "\t"  6  street3            SQL_Latin1_General_CP1_CI_AS 
7  SQLCHAR    0  60  "\t"  7  house_number           SQL_Latin1_General_CP1_CI_AS 
8  SQLCHAR    0  60  "\t"  8  house_number_completion        SQL_Latin1_General_CP1_CI_AS 
9  SQLCHAR    0  256  "\t"  9  street             SQL_Latin1_General_CP1_CI_AS 
10  SQLCHAR    0  256  "\t"  10 street5            SQL_Latin1_General_CP1_CI_AS 
11  SQLCHAR    0  30  "\t"  11 postal_code           SQL_Latin1_General_CP1_CI_AS 
12  SQLCHAR    0  256  "\t"  12 city             SQL_Latin1_General_CP1_CI_AS 
13  SQLCHAR    0  128  "\t"  13 tel_number            SQL_Latin1_General_CP1_CI_AS 
14  SQLCHAR    0  128  "\t"  14 fax_number            SQL_Latin1_General_CP1_CI_AS 
15  SQLCHAR    0  50  "\t"  15 chassis_number           SQL_Latin1_General_CP1_CI_AS 
16  SQLCHAR    0  10  "\t"  16 brand             SQL_Latin1_General_CP1_CI_AS 
17  SQLCHAR    0  15  "\t"  17 model_key            SQL_Latin1_General_CP1_CI_AS 
18  SQLCHAR    0  15  "\t"  18 fiscal_horse_power          SQL_Latin1_General_CP1_CI_AS 
19  SQLCHAR    0  60  "\t"  19 engine_option           SQL_Latin1_General_CP1_CI_AS 
20  SQLCHAR    0  24  "\t"  20 first_registration_date        "" 
21  SQLCHAR    0  24  "\t"  21 current_registration_date        "" 
22  SQLCHAR    0  100  "\t"  22 sales_dealer           SQL_Latin1_General_CP1_CI_AS 
23  SQLCHAR    0  100  "\t"  23 licence_plate           SQL_Latin1_General_CP1_CI_AS 
24  SQLCHAR    0  60  "\t"  24 engine_code           SQL_Latin1_General_CP1_CI_AS 
25  SQLCHAR    0  12  "\r\n" 25 year             "" 
+0

ソースファイルからサンプル行を追加できますか? –

+0

なぜ、デフォルトである '\ n'の代わりに' 0x0a'を使用しましたか? *異なる*エラーが発生し、ターミネータが間違っていると考えましたか? SQL Serverは特殊文字を認識しませんか? (たとえそれがあったとしても、 '0x0a'は' \ n'文字ではなく4文字の並びです –

+0

最初に正しいBULK INSERT文を書くようにしてください。*次に*変換する方法を探してみてくださいなぜ文字列を使用するのですか?BULK INSERTを直接呼び出して、パラメータとして変更する必要がある値を渡すのはなぜですか? –

答えて

0

you'areがあなたのFMTファイルを作成するときは、使用したのと同じようにフィールドターミネータを指定する必要がありますあなたのCSVファイルに ドキュメントがbcp commandのために与えられている、あなたは

bcp AdventureWorks..myDepartment in C:\myDepartment-c-t.txt -c -t ; -r \n -T 

としてはthis documentationで説明-tオプションを指定する必要があり、デフォルトのフィールド・ターミネータは\tあり、問題のようです。

+0

bcpのリンクは無効です。ローターミネータとして '\ r \ n'を指定するには、' -r \ r'を実行します([フィールドとローターミネータの指定(SQLサーバ)](https://docs.microsoft.com/en-us/sql/relational -databases/import-export /指定フィールドおよび行ターミネータ-sql-server) - ターミネータとしてサポートされている文字)。 –

+0

Thxを修正するために、私はリンクを修正しました。あなたが正しいので '-r \ n'オプションを修正しました。行ターミネータには' \ r'が自動的に付いています – Arno

関連する問題