繁体   English   中英

批量加载数据转换错误

[英]Bulk load data conversion error

我正在尝试将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]

我在您的方法中看到了一个问题,但是我不确定它是否会产生该错误。 该表有三列,但您的数据只有两列。 即使有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'
     );

请参阅: https//msdn.microsoft.com/zh-CN/library/ms188365.aspx,以获取BULK INSERT选项。

CODEPAGE = {'ACP'| 'OEM'| 'RAW'| 'code_page'}指定数据文件中数据的代码页。 仅当数据包含字符值大于127或小于32的char,varchar或text列时,CODEPAGE才相关。

解决方法是简单地添加一列。 我想因为我的表有三列,所以它预期文件中有三列。

我的文件(我也尝试过不带引号,但也无法正常工作):这是有效的文件

partition-1,1,
partition-2,1,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM