将CSV加载到SQL Server错误

时间:2016-05-05 02:17:49

标签: c# sql-server tsql bulkinsert

我有一个像这样的SQL Server表

CREATE TABLE [dbo].[Service]
(
    [SID] INT IDENTITY (1, 1) NOT NULL,
    [LID]     INT NOT NULL,
    [RID]     INT NOT NULL,

    PRIMARY KEY CLUSTERED ([SID] ASC),

    CONSTRAINT [FK_dbo.Service_dbo.Location_LID] 
        FOREIGN KEY ([LID]) 
        REFERENCES [dbo].[Locations] ([LID]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.Service_dbo.Rates_RID] 
        FOREIGN KEY ([RID]) 
        REFERENCES [dbo].[Rates] ([RID]) ON DELETE CASCADE
)

我有一个.csv文件,实际上是3列升序数字,从1-100000开始

示例:

1,1,1
2,2,2
3,3,3

并且它会持续到100k行。

我正在尝试使用此查询通过Visual Studio通过T-SQL加载此.csv

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

我收到以下错误,但我不知道原因:

  

Msg 4864,Level 16,State 1,Line 1
  第1行第3列(RID)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

2 个答案:

答案 0 :(得分:0)

诊断BULK INSERT问题的最简单方法是指定错误文件。错误文件将包含失败行的确切数据。根据MSDN,您还将获得一个控制文件,该文件将识别每个失败的行并提供有关每个失败的详细信息。

    BULK INSERT service
    FROM 'C:\service.csv'
    WITH
    (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '\r\n',
        ERRORFILE = 'C:\ErrorFile.txt'
    );

当您打开包含失败数据的错误文件时,请使用显示空格和不可打印字符的文本编辑器,或者使用显示模式显示每个字符的字符代码的文本编辑器。如果您有任何意外的字符,它们就会显示出来。

答案 1 :(得分:0)

如果您使用Excel保存CSV文件,请确保已将其另存为“CSV(MS-DOS)”而不是“CSV(Macintosh)”。如果CSV文件是正确的CSV文件格式,则可以尝试使用格式文件进行批量加载。 您的CSV格式文件应如下所示:

9.0
3
1   SQLINT  0   4   ","      1  SID ""
2   SQLINT  0   4   ","      2  LID ""
3   SQLINT  0   4   "\r\n"   3  RID ""

您可以批量加载查询,如下所示:

BULK INSERT [Service]
    FROM 'C:\import_dos.csv'
    WITH (FORMATFILE = 'C:\temp\services.FMT')