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

时间:2011-02-16 00:46:42

标签: sql sql-server sql-server-2008

对于SQL Server 2008 R2,是否可以使用“批量插入”导入日期为“MM / DD / YYYY”格式的.csv文件?或者我是否必须将我的.csv文件更改为具有SQL Server 2008 R2期望的格式?

我在Microsoft SQL Server 2008 R2中执行以下命令:

BULK
INSERT dbo.TCsvOptionContracts
FROM 'C:\x.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FORMATFILE = 'C:\format.xml',
FIRSTROW = 2
)
GO

我收到了这个错误:

Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (Date).

.csv文件的此列中的日期格式为MM / DD / YYYY,即“02/16/2011”。

P.S。我使用以下命令生成了一个格式文件,但是,我没有看到任何选项来为违规列指定MM / DD / YYYY日期格式:

bcp Engine..TCsvOptionContracts format nul -c -x -f C:\format.xml -t, -T

3 个答案:

答案 0 :(得分:2)

将“date”列配置为“smalldatetime”而不是“datetime”。试了一下,一切都进口了100%。

有两种可能的方法可以做到这一点:

  • 方法1:丢弃格式化文件,它会在没有它的情况下正常读取(这绝对有效)。
  • 方法2:如果LINQ-to-Entities坚持在此列中生成“datetime”,则更改格式化文件以指定“smalldatetime”,以便它正确读入(没有尝试过,但我想它可能会有效) )。

答案 1 :(得分:0)

这有点晚了,但如果您仍然无法将数据批量插入SQL 2008 R2中的日期列,请查看此修补程序: http://support.microsoft.com/kb/968215 这为我解决了。

答案 2 :(得分:-3)

FROM'C:\ x.csv' 批量加载时,确保文件与SQL Server位于同一目录中非常重要。 如果SQL服务器在c:\中,那么文件应该在C:中。 如果SQL服务器在D:\中,那么文件应该在D:中。 我发现它有很多帮助