【问题标题】:SQL Server: The bulk load failed. The column is too long in the data file for row 1, column 1SQL Server:批量加载失败。数据文件中第 1 行第 1 列的列太长
【发布时间】:2012-01-20 18:51:57
【问题描述】:

有人请在这里帮助我。一直在看这个几个小时,但无处可去。

我使用以下脚本在 SQL Express 2008 R2 中创建了一个表:

CREATE TABLE Features
(
ID int not null identity(1,1 ),
StopID varchar(10), 
Code int,
Name varchar(100),
Summary varchar(200),
Lat real,
Lon real,
street varchar(100),
city varchar(50),
region varchar(50),
postcode varchar(10),
country varchar(20),
zone_id varchar(20),
the_geom geography


 CONSTRAINT [PK_Features] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

然后,我使用 bcp 工具针对我的数据库表创建了以下格式文件:

10.0
12
1       SQLCHAR             2       100     ","    2     StopID               Latin1_General_CI_AS
2       SQLINT              1       4       ","    3     Code                 ""
3       SQLCHAR             2       100     ","    4     Name                 Latin1_General_CI_AS
4       SQLCHAR             2       200     ","    5     Summary              Latin1_General_CI_AS
5       SQLFLT4             1       4       ","    6     Lat                  ""
6       SQLFLT4             1       4       ","    7     Lon                  ""
7       SQLCHAR             2       100     ","    8     street               Latin1_General_CI_AS
8       SQLCHAR             2       50      ","    9     city                 Latin1_General_CI_AS
9       SQLCHAR             2       50      ","    10    region               Latin1_General_CI_AS
10      SQLCHAR             2       10      ","    11    postcode             Latin1_General_CI_AS
11      SQLCHAR             2       20      ","    12    country              Latin1_General_CI_AS
12      SQLCHAR             2       20      "\r\n"    13    zone_id              Latin1_General_CI_AS

此文件已被修改以删除 ID 和 the_geom 字段,因为它们不在我的数据文件中。

然后我尝试批量插入包含以下内容的 1 行 csv:

a,8,S,,45.439869,-75.695839,,,,,,

我得到的都是:

Msg 4866, Level 16, State 7, Line 35
The bulk load failed. The column is too long in the data file for row 1, column 1. Verify that the field terminator and row terminator are specified correctly.
Msg 7399, Level 16, State 1, Line 35
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 35
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

任何指针都会在这里有所帮助,因为我无法弄清楚这一点。

【问题讨论】:

    标签: sql-server bcp


    【解决方案1】:

    问题是由我的格式文件中的默认前缀长度设置引起的。我从中导入的数据文件不是使用 bcp 创建的,因此我必须将所有字段的前缀长度设置为 0,如下所示:

    0.0
    12
    1       SQLCHAR             0       100     ","    2     StopID               Latin1_General_CI_AS
    2       SQLINT              0       4       ","    3     Code                 ""
    3       SQLCHAR             0       100     ","    4     Name                 Latin1_General_CI_AS
    4       SQLCHAR             0       200     ","    5     Summary              Latin1_General_CI_AS
    5       SQLFLT4             0       4       ","    6     Lat                  ""
    6       SQLFLT4             0       4       ","    7     Lon                  ""
    7       SQLCHAR             0       100     ","    8     street               Latin1_General_CI_AS
    8       SQLCHAR             0       50      ","    9     city                 Latin1_General_CI_AS
    9       SQLCHAR             0       50      ","    10    region               Latin1_General_CI_AS
    10      SQLCHAR             0       10      ","    11    postcode             Latin1_General_CI_AS
    11      SQLCHAR             0       20      ","    12    country              Latin1_General_CI_AS
    12      SQLCHAR             0       20      "\r\n"    13    zone_id              Latin1_General_CI_AS
    

    通过此更改,导入成功。

    【讨论】:

    • 多年后......我已经为此苦苦挣扎了好几天,这个答案为我解决了这个问题。
    • @KlausNji:你能批量插入只有一行的文件吗?我尝试了相同的方法,但是如果该行(基本上是最后一行)的最后一列为空(就像在您的文件中一样),它会完全忽略该行。我一直无法找到解决方案。
    【解决方案2】:

    对于它的价值,我遇到了同样的问题,因为我的 CSV 中日期字段的预期格式和实际格式之间存在冲突。我更改了我的 CSV 中的日期格式,并且它起作用了。

    【讨论】:

      【解决方案3】:

      试试这个,

      ROWTERMINATOR = '0x0a'
      

      【讨论】:

      • 谢谢米兰,这对我有用。如果注释值没有,ROWTERMINATOR = '0x0a' --'\o\r\n'
      【解决方案4】:

      我今天遇到了这个问题,但仅限于文本值超过 8000 个字符的 COLUMNS 的特定 ROWS。不管我的 FMT 文件是否为 SQLCHAR 0 0 表示最大值,但在管道的某处,最大值为 8000

      我正在使用 AZURE SQL 并尝试读取 Azure Blob 容器中的 CSV。

      【讨论】:

        猜你喜欢
        • 2020-01-07
        • 2020-03-04
        • 2018-12-01
        • 1970-01-01
        • 2014-02-26
        • 2017-01-17
        • 2018-10-19
        • 2022-11-26
        • 2020-07-11
        相关资源
        最近更新 更多