我试图将数据从csv加载到SQL表中。
我的DDL:
CREATE TABLE pcm.dbo.partitiondocumentcount
(
partitionkey NVARCHAR(30) NOT NULL,
documentcount INT NOT NULL,
datetime DATETIME2(3) DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_partitiondocumentcount PRIMARY KEY (partitionkey ASC)
)
CREATE NONCLUSTERED INDEX partitionkey_index
ON pcm.dbo.partitiondocumentcount (partitionkey AS
我的档案(我也尝试过没有引号,也没有工作):
"partition-1",1
"partition-2",1
我的查询:
BULK INSERT partitionDocumentCount
FROM 'C:\files\pcmInitialConfiguration\partitionCount.csv'
WITH(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
SELECT * FROM partitionDocumentCount
我从DBVisualizer得到错误:
15:36:26 [BULK - 0 row(s), 0.008 secs] [Error Code: 4864, SQL State: S0001] Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 2 (documentcount).
15:36:26 [SELECT - 0 row(s), 0.004 secs] Empty result set fetched
... 2 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.012/0.000 sec [0 successful, 1 warnings, 1 errors]
答案 0 :(得分:1)
我在你的方法中看到一个问题,但我不确定它会产生那个错误。该表有三列,但您的数据只有两列。即使使用default
约束,bulk insert
仍然会查找第三列。它可能会出现错误,因为它正在寻找逗号但遇到行尾。
解决方法是使用视图:
create view pcm.dbo.partitiondocumentcount_2 as
select partitionkey, documentcount
from pcm.dbo.partitiondocumentcount;
然后:
BULK INSERT partitionDocumentCount_2
FROM 'C:\files\pcmInitialConfiguration\partitionCount.csv'
WITH (FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
答案 1 :(得分:0)
请参阅:https://msdn.microsoft.com/en-AU/library/ms188365.aspx了解BULK INSERT选项。
CODEPAGE = {'ACP'| 'OEM'| 'RAW'| 'code_page'}指定代码 数据文件中的数据页面。 CODEPAGE仅在相关时才有意义 data包含具有字符值的char,varchar或text列 大于127或小于32。
答案 2 :(得分:0)
解决方案只需添加一列。 我想因为我的表有三列,所以预计文件中有三列。
我的文件(我也试过没有引号,也没用): 这是工作的
partition-1,1,
partition-2,1,