我使用BULK INSERT在procStock,並得到該錯誤消息:SQL服務器:BULK INSERT失敗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 ""
你可以添加源文件中的示例行嗎? –
爲什麼你使用'0x0a'而不是默認的'\ n'?你有沒有遇到*不同的錯誤,並認爲終結者錯了?或者SQL Server無法識別特殊字符? (即使它是,'0x0a'只是一個4字符的序列,而不是'\ n'字符 –
試着先寫一個正確的BULK INSERT語句。*然後*嘗試找到一種方法來轉換它爲一個字符串。順便說一句,*爲什麼*使用在所有的字符串?爲什麼不直接調用BULK INSERT,傳遞了需要改變的參數的任何值? –