首页 > 解决方案 > 使用生成的密钥进行 sql 批量插入

问题描述

我定义了一个带有唯一反对(生成)的表

CREATE TABLE Table1(
    Id bigint   IDENTITY PRIMARY KEY
    ,Version    VARCHAR(10) NOT NULL
    ,Date       DATE  NOT NULL
    ,Code       VARCHAR(10) NOT NULL);
INSERT INTO Table1(Version,Date,Code) VALUES ('1.0','2018-04-16','8615');
INSERT INTO Table1(Version,Date,Code) VALUES ('1.0','2018-04-16','2285');
INSERT INTO Table1(Version,Date,Code) VALUES ('1.0','2018-04-16','11625');

现在我有一个.csv。包含要插入的更多信息的文件。我想像使用 BULK INSERT

BULK INSERT Table1 
FROM 'C:\test.csv' 
WITH (
    FIELDTERMINATOR = ','
    ,ROWTERMINATOR = '\n'
    )

输入文件包含:

    1.0,2018-04-16,240061
    1.0,2018-04-17,3435
    1.0,2018-04-18,2143
    1.0,2018-04-19,44
    1.0,2018-04-20,2453
    1.0,2018-04-01,2012
    1.0,2018-04-22,123
    1.0,2018-04-23,9887
    1.0,2018-04-30,57
    1.0,2018-05-1,576
    1.0,2018-05-8,35
    1.0,2018-05-9,867
    1.0,2018-05-10,555
....

运行 BULK INSERT 语句会导致错误

Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 1 (Id).
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 (Id).

将大量数据从 csv 插入到 de 表中的最佳方法是什么?(超过 10000 行)

标签: sql-servercsvtsqlinsertbulkinsert

解决方案


尝试指定列名,如

BULK INSERT Table1 (Version,Date,Code)
FROM 'C:\test.csv' 
WITH (
FIELDTERMINATOR = ','
,ROWTERMINATOR = '\n'
)

推荐阅读