批量插入表格

时间:2012-06-19 11:19:06

标签: sql sql-server

我有下一张桌子:

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

1 个答案:

答案 0 :(得分:0)

看起来它似乎并没有划分行。我不得不按列分隔符 AND 行分隔符分隔行,因为文本文件在我花了一段时间才发现的最后一个值之后有一个post ceding(和不必要的)列分隔符。这些日期肯定符合格式(假设在一个巨大的文件中没有一些不好的数据,你无法在视觉上发现,并且因为默认情况下它不会失败,直到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的风格或使用text作为数据类型创建临时表,查看set ansi_warnings off或使用ERRORFILE。 SQL Server 2005强制执行更严格的数据验证并且强制执行插入操作更加困难,但可以完成。