【发布时间】:2016-09-24 05:01:42
【问题描述】:
我有一个批量插入查询,如下所示
BULK INSERT tmp_table FROM 'file.jrl'
WITH (
DATAFILETYPE='widenative' ,
FIELDTERMINATOR = '~' ,
MAXERRORS = 0 ,
ROWS_PER_BATCH = 116064 ,
ROWTERMINATOR = '0x0a' ,
TABLOCK )
它给了我以下错误
消息 4866,第 16 级,状态 4,第 1 行 批量加载失败。数据文件中第 1 行第 1 列的列太长。请验证是否正确指定了字段终止符和行终止符。
消息 7399,第 16 级,状态 1,第 1 行 链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供者没有提供有关错误的任何信息。
消息 7330,第 16 级,状态 2,第 1 行 无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取行。
我正在使用 DATAFILETYPE='widenative' ,因为我的数据包含一些特殊字符,如 Ñ、Ã 等
对于 RowTerminator 值,我还检查了 '\n'
我的列分隔符是 ~。我有什么需要改变的吗? 我的样本数据如下
12345 ~asdfdfdfd ~ ~ ~ ~ ~0000000000~ ~0000000000~ ~rrrrñtttttt ~
【问题讨论】:
-
错误很明显 - 您的表格列比文件中第 1 行第 1 列的值短,即
12345。表架构在哪里?你注意到数字后面的多余空格了吗? -
@Panagiotis Kanavos,95% 的 BULK INSERT 返回的错误消息与实际原因几乎没有共同之处。
-
@captainsac,看看这个:social.msdn.microsoft.com/Forums/sqlserver/en-US/…。还要确保文件中的列数永远不会改变。
-
缺少任何其他信息,我会先检查列大小。此外,看起来无关紧要的事情实际上可能是正确的。
-
@Alex 您发布的内容只是证明输入文件的格式不正确。 BULK INSERT 不是 CSV 导入工具,它是从确实遵循格式的文件中快速批量导入工具。如果需要任何类型的转换,则应使用 SSIS
标签: sql-server-2012 bulkinsert