1

我在 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和各种其他格式。
  • 添加/删除/更改批量插入语句选项DATAFILETYPE, TABLOCK, CHECK_CONSTRAINTS.
  • 更改格式文件中的分隔符和字段大小(尽管根据 MSDN,字段大小无关紧要)。
  • 运行SET DATEFORMAT ymd
  • 使用十六进制编辑器检查导入的文件,确保它确实包含 8 位字符而不是 unicode;它包含以 ASCII 格式显示的内容。

有任何想法吗?

4

3 回答 3

0

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

BULK INSERT dbo.BulkTest
FROM 'Q:\...\BulkTest.tab'
WITH (
    CHECK_CONSTRAINTS,
    TABLOCK,
    FIRSTROW=1,
    DATAFILETYPE='char',
    ROWTERMINATOR='\r\n'
);
于 2012-06-04T21:05:58.537 回答
0

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

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

我没有使用SQLDATE类型,而是使用了SQLCHAR和长度。

2015-01-01 = 长度 10

11.0

1

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

于 2015-03-16T13:17:30.443 回答
0

这是适用于我的代码的格式:

08/17/2000 16:32:32

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

于 2012-06-04T20:06:56.943 回答