SQL Server 2005 - 批量插入问题

时间:2010-11-01 01:16:57

标签: sql sql-server sql-server-2005 tsql bulk-load

我从sql server 2005中的批量加载中收到以下错误消息,并且在想法后我可以尝试解决此问题。

第2行第4列(类型)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

BULK INSERT dbo.BobTable FROM 'C:\DataFiles\Bob.txt' 
WITH (FIELDTERMINATOR = '","', FIRSTROW=2,ROWTERMINATOR = '\n',DATAFILETYPE='char')

有什么想法吗?

"id","altid","altid2","type"    
123456789.00,"ABC1234","ABC1234","R"

我无法更改源文件,但我可以更改要插入的表。 (不要问我原因,但是在ID的末尾插入了小数...我只需处理它。)

CREATE TABLE [dbo].[BOB](
  [id] [nvarchar](50) NULL,
  [Altid] [nvarchar](50) NULL,
  [Altid2] [nvarchar](50) NULL,
  [type] [nvarchar](50) NULL
)

1 个答案:

答案 0 :(得分:2)

批量插入不擅长处理Quote和逗号分隔符,而无需格式文件的帮助。您需要创建或生成一个,然后使用批量插入引用它。

在您的示例中,第一个字段以,"结尾,而不是",",因此SQL认为该字段太长。

这是一个很好的起点: Creating a Format File

关于格式文件的应用,这也是您的问题的一个示例:Using a Format File to Bulk Import Data

之前我已经使用过这些方法,如果您的文件格式随着时间的推移而发生变化,则可能很难维护,但它为BULK INSERT进程提供了必要的灵活性。

另外,您是否可以将SSIS用于任何此类工作? SSIS可以处理引号和逗号分隔文件,比BCP格式文件的痛苦少得多。如果你有选择权,我完全推荐它。