【问题标题】:SQL Server : why does Bulk Load fail?SQL Server:为什么批量加载失败?
【发布时间】:2018-03-28 12:34:38
【问题描述】:

当我取消注释 rownum 行并出现以下错误时,批量加载失败。我知道这个问题的解决方法。但我需要了解为什么它会显示错误消息。

消息 4866,第 16 级,状态 1,第 41 行
批量加载失败。数据文件中第 1 行第 1 列的列太长。请验证是否正确指定了字段终止符和行终止符。

消息 7399,第 16 层,状态 1,第 41 行
链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供者没有提供有关错误的任何信息。

消息 7330,第 16 级,状态 2,第 41 行
无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取行。

代码:

CREATE TABLE #TEMPFILE
(
    LINE VARCHAR(5000)
    ,rownum int identity(1,1) primary key
)

EXEC('BULK INSERT #TEMPFILE FROM '''+ @FILENAME + ''' WITH (ROWTERMINATOR = ''0x0a'', lastrow = 1)  ')

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    这是我在 SQL Server 中用于批量插入的语法

    BULK
    INSERT Table_Name
    FROM FileName/FilePath
    WITH
    (
      FIRSTROW = 2,
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
    )
    

    【讨论】:

    • 我知道解决方法,但是如果一行不能存储一定数量的数据,会有限制吗?
    • @Priyesh 是的,如果数据长于指定字段。可能你还没有指定字段终止符
    • @Priyesh 您尝试插入的数据的示例是什么?
    • 我试图实现的是将行终止符 = '\n' 的任何分隔符文件数据插入到#tempfile 表的行列中,并将另一列作为标识列用于查询目的。令人惊讶的是,带有保持身份选项的批量插入也不起作用。所以我不得不在插入后手动添加列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    相关资源
    最近更新 更多