导入DATETIME数据时批量加载数据转换错误

时间:2012-06-04 19:58:37

标签: sql-server sql-server-2008

我在StackOverflow上找到了关于这个主题的一些帖子,但似乎都没有解决我的问题。

我正在尝试为SQL Server 2008 Express设置批量导入,但无法导入datetime值。这个问题看起来很基本,我必须错过一些非常简单的事情,我希望别人能解决这个问题。

问题

我正在导入此表:

CREATE TABLE [dbo].[BulkTest](
    [ReportDate] [datetime] NOT NULL
)

这是我的格式文件(BulkTest.fmt):

10.0
1
1       SQLDATETIME   0       0       "\r\n"   1     ReportDate                                 ""

这是导入的数据(BulkTest.tab):

ReportDate
2010-12-31
2011-01-31

这是导入声明:

BULK INSERT dbo.BulkTest
FROM 'Q:\...\BulkTest.tab'
WITH (
    CHECK_CONSTRAINTS,
    TABLOCK,
    FORMATFILE='Q:\...\BulkTest.fmt',
    FIRSTROW=1,
    DATAFILETYPE='char'
    );

这些是错误:

Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 1 (ReportDate).
Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (ReportDate).
Msg 4832, Level 16, State 1, Line 1

我试过

  • 更改日期格式,包括12/31/201031/12/2010201012312010-12-31 00:00:00以及其他各种格式。
  • 添加/删除/更改批量插入语句选项DATAFILETYPETABLOCKCHECK_CONSTRAINTS
  • 更改格式文件中的分隔符和字段大小(虽然根据MSDN,字段大小无关紧要)。
  • 正在运行SET DATEFORMAT ymd
  • 使用十六进制编辑器检查导入的文件,以确保它确实包含8位字符而不是unicode;它包含以ASCII格式显示的内容。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

这是我的代码中的格式:

08/17/2000 16:32:32

生产者恰好是.NET,ToString(DateTimeFormatInfo.InvariantInfo)

答案 1 :(得分:0)

为什么需要格式文件呢?你不使用它会发生什么?

BULK INSERT dbo.BulkTest
FROM 'Q:\...\BulkTest.tab'
WITH (
    CHECK_CONSTRAINTS,
    TABLOCK,
    FIRSTROW=1,
    DATAFILETYPE='char',
    ROWTERMINATOR='\r\n'
);

答案 2 :(得分:0)

对不起,我迟到了,但我希望这可以帮助其他一些可怜的人。

无论如何,我在使用格式文件时发现了同样的错误。

我没有输入 SQLDATE ,而是使用 SQLCHAR 和长度。

2015-01-01 =长度10

  

11.0

     

1

     

1 SQLCHAR 0 10" \ r \ n" 1 my_date""