0

我有下一张桌子:

CREATE TABLE [dbo].[tempTable](
    [id] [varchar](50) NULL,
    [amount] [varchar](50) NULL,
    [bdate] [varchar](50) NULL
)

和下一个插入语句:

BULK INSERT dbo.tempTable
   FROM 'C:\files\inv123.txt'
   WITH 
      (
         FIELDTERMINATOR ='\t',
         ROWTERMINATOR ='\n'
      )

我得到下一个错误:

第 1 行第 3 列 (bdate) 的批量加载数据转换错误(截断)。

文件中的数据示例:

12313 24 2012-06-08 13:25:49
12314 26 2012-06-08 12:25:49
4

1 回答 1

0

看起来它只是没有划定行。我不得不按列分隔符行分隔符分隔行,因为文本文件在我花了一段时间才发现的最后一个值之后有一个后退(和不必要的)列分隔符。这些日期肯定符合格式(假设在您无法直观发现的大文件中没有一些坏数据,并且由于默认情况下它直到 10 个错误才会失败,所以至少会有那么多坏记录) 并且看起来它正在正确地做到这一点。如果可以的话,在一个好的文本编辑器中以十六进制查看文件,然后查看或尝试:

BULK INSERT dbo.tempTable
FROM 'C:\files\inv123.txt'
WITH 
  (
     FIELDTERMINATOR ='\t',
     ROWTERMINATOR = '\t\n' 
  )

另一种可能性(我怀疑它是varchar(50))是 inv123.txt 文件中有标头,并且标头被认为是一行并且超出varchar(50)并且它是被截断的内容。在这种情况下,您可以添加

FIRSTROW = 2, 

如果在这些事情之后仍然失败,请尝试强制输入一些数据或抓取出错的行,以便您真正知道问题出在哪里。根据 SQL SERVER 的风格查看set ansi_warnings off或使用,或创建一个以文本为数据类型的临时表。ERRORFILESQL Server 2005 强制执行更严格的数据验证,并且强制插入而不失败更加困难,但可以做到。

于 2012-06-19T13:30:27.840 回答