我使用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,传递了需要改变的参数的任何值? –