我从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
)
答案 0 :(得分:2)
批量插入不擅长处理Quote和逗号分隔符,而无需格式文件的帮助。您需要创建或生成一个,然后使用批量插入引用它。
在您的示例中,第一个字段以,"
结尾,而不是","
,因此SQL认为该字段太长。
这是一个很好的起点: Creating a Format File
关于格式文件的应用,这也是您的问题的一个示例:Using a Format File to Bulk Import Data
之前我已经使用过这些方法,如果您的文件格式随着时间的推移而发生变化,则可能很难维护,但它为BULK INSERT
进程提供了必要的灵活性。
另外,您是否可以将SSIS用于任何此类工作? SSIS可以处理引号和逗号分隔文件,比BCP格式文件的痛苦少得多。如果你有选择权,我完全推荐它。