【问题标题】:SQL BULK INSERT tries to insert all rows to insert into last column of first rowSQL BULK INSERT 尝试将所有行插入到第一行的最后一列
【发布时间】:2013-07-25 19:44:06
【问题描述】:

我对 SQL Server 并不完全熟悉,但我正在处理一个项目并试图使导入过程尽可能简单。我正在导入 tsv 文件而不是 csv。我遇到的问题是,当我尝试使用 BULK INSERT 时,我收到一条错误消息,第 1 行第 15 列(TY)的批量插入数据转换错误(截断)

我弄清楚它到底在做什么的唯一方法是尝试 BULK INSERT 2 行。它插入第一行,但不插入第二行。我看了看数据,走到最后一列,果然,第二行在最后一列。对于 BULK INSERT,我使用的是代码..

BULK INSERT Deal_Log
FROM 'C:\Users\Deals.tsv'
WITH
(
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n\t\r' 
)
GO

FieldTerminator \t 用于制表符分隔值。我研究了如何批量插入 tsv 文件并找到 Aaron Bertrand 的一篇文章(不再可用)。

在这个链接中,他说要尝试使用 RowTerminator 来尝试让它工作。我试过\t\n、\n\r、\n、\r、\r\n\t、\n\r\t。到目前为止,唯一插入任何内容的是 \t\n、上面的一个和 \n\t,但它只将第一行和所有剩余的行插入到第一行的最后一列。这是tsv文件的格式..

182  20  THE DEALERSHIP, INC.  07/05/13  A34323  MODEL  MODE DESCRIPTION  BANKS NAME  1225.25  7856  6  KL8CB8384323DC43445  D

我查看了 tsv 文件中的数据,在列之前或之后没有选项卡式空格。如果需要更多信息,请告诉我!感谢您的帮助!

【问题讨论】:

    标签: sql sql-server tsql bulkinsert


    【解决方案1】:

    可能是一个 Unix 文件,见这里BULK INSERT data where the row terminator is a linefeed in SQL Server

    您必须将CHAR(10) 与动态 SQL 一起使用

    【讨论】:

    • 感谢您的帮助。我试了一下,但现在出现错误..Msg 4832, Level 16, State 1, Line 1 Bulk load:在数据文件中遇到了意外的文件结尾。消息 7399,级别 16,状态 1,第 1 行链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供商没有提供有关该错误的任何信息。消息 7330,级别 16,状态 2,第 1 行无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”获取行。
    【解决方案2】:

    事实证明,不需要 Rowterminator。使用批量插入并没有解决我的所有问题,但是一旦我弄清楚了它确实会有所帮助。我遇到的最大问题是田地被切断并放在另一条线上。这是发生截断的原因之一。检查原始 csv 下载对于确保一切顺利进行非常重要。这是一个独特的情况,因为我的公司仍在使用一个软件应用程序,当 DOS 出现时,它应该已经死了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多