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