Dai*_*Dai 6 sql t-sql sql-server bulkinsert
我有600万行数据要插入到我的SQL Server数据库中.我可以用600万INSERT语句(通过我的计算运行需要18个小时)来缓慢地进行,或者我可以尝试BULK INSERT.
BULK INSERT存在无法转义字符的问题,但这种情况下的数据非常简单,所以不应该遇到这个问题.
但是,SQL Server似乎不希望将任何形式的日期/时间数据插入到字段中.
这是表(psuedo-SQL)
CREATE TABLE Tasks (
TaskId bigint NOT NULL IDENTITY(1,1) PRIMARY KEY,
TriggerId bigint NOT NULL FOREIGN KEY,
Created datetime NOT NULL,
Modified datetime NOT NULL,
ScheduledFor datetime NULL,
LastRan datetime NULL,
-- and about 10 more fields after this
)
Run Code Online (Sandbox Code Playgroud)
这是我的BULK INSERT声明:
SET DATEFORMAT dmy
BULK INSERT Tasks
FROM 'C:\TasksBulk.dat'
WITH (
-- CHECK_CONSTRAINTS is not necessary as the only constraints are always enforced regardless of this option (UNIQUE, PRIMARY KEY, and NOT NULL)
CODEPAGE = 'RAW',
DATAFILETYPE = 'native',
KEEPIDENTITY,
MAXERRORS = 1,
ORDER ( CallId ASC ),
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\0'
)
Run Code Online (Sandbox Code Playgroud)
这是TasksBulk.dat中的第一行数据:
1000\t1092\t01/01/2010 04:00:17\t01/01/2010 04:00:17\t\t01/01/2010 04:00:14\0
Run Code Online (Sandbox Code Playgroud)
(为了便于阅读,重新格式化了用4个空格替换的制表符:)
1000 1092 01/01/2010 04:00:17 01/01/2010 04:00:17 01/01/2010 04:00:14\0
Run Code Online (Sandbox Code Playgroud)
但是,当我运行BULK INSERT语句时,我收到此错误:
消息4864,级别16,状态1,行2第1行第3列(已创建)的批量装入数据转换错误(指定代码页的类型不匹配或无效字符).
我尝试使用不同的行和字段终止符以及每种不同的日期/时间格式(包括"01/01/2010","2010-01-01",有和没有"04:00:17"时间组件).我不知道我在这里做错了什么.
事实证明,将DATAFILETYPE从"native"更改为"char"解决了这个问题."native"类型意味着一切都是严格的数据格式,而"char"意味着更多的纯文本文件.
| 归档时间: |
|
| 查看次数: |
26950 次 |
| 最近记录: |