Sql server MSSQL-导入平面文件-格式不正确

Sql server MSSQL-导入平面文件-格式不正确,sql-server,csv,Sql Server,Csv,我使用MSSQL Server 2019,我想通过以下方式将CSV文件插入自动生成的数据库: DB->Tasks->导入平面文件…(错误更低) DB->Tasks->Import Data…(必须将.xlsx导出到.xls(2003),但不能正确导入所有行,行格式类似于文本,值类似于930或280导出类似于null值) 如果我手动选择所有列作为varchar导入是可以的,但如果我使用choose float datatype,我会得到一个错误 数据库排序-拉丁1\u通用\u 100\u CI

我使用MSSQL Server 2019,我想通过以下方式将CSV文件插入自动生成的数据库:

  • DB->Tasks->导入平面文件…(错误更低)
  • DB->Tasks->Import Data…(必须将.xlsx导出到.xls(2003),但不能正确导入所有行,行格式类似于文本,值类似于930或280导出类似于null值)
如果我手动选择所有列作为varchar导入是可以的,但如果我使用choose float datatype,我会得到一个错误

数据库排序-拉丁1\u通用\u 100\u CI\u AS\u SC\u UTF8

来自CSV文件的数据:

XXX;XXX;TBJ;A;33;4;1.4;6;3000;1206;3216-18;3.2;0.2;1.6;0.2:0.1;1.8;hre_tbj_dla;K
XXX;XXX;TBJ;A;33;4;1.4;6;3000;1206;3216-18;3.2;0.2;1.6;0.2:0.1;1.8;hre_tbj_dla;M
XXX;XXX;TBJ;A;3.3;6;0.5;6;8000;1206;3216-18;3.2;0.2;1.6;0.2:0.1;1.8;hre_tbj_dla;K
BULK INSERT [dbo].[xxx]
    FROM 'c:\Users\xxx\Documents\Work\xxx.csv'
    WITH
    (
    FIRSTROW = 2,
    FIELDTERMINATOR = ';',  --CSV field delimiter
    ROWTERMINATOR = '\n',   --Use to shift the control to next row
    ERRORFILE = 'c:\Users\xxx\Documents\Work\xxx_error.csv',
    TABLOCK
    );
加载到MSSQL导入平面数据向导的数据:


我通过批量插入尝试不同类型的加载数据

  • 创建包含行的空表
  • 使用批量插入
  • 示例:

    XXX;XXX;TBJ;A;33;4;1.4;6;3000;1206;3216-18;3.2;0.2;1.6;0.2:0.1;1.8;hre_tbj_dla;K
    XXX;XXX;TBJ;A;33;4;1.4;6;3000;1206;3216-18;3.2;0.2;1.6;0.2:0.1;1.8;hre_tbj_dla;M
    XXX;XXX;TBJ;A;3.3;6;0.5;6;8000;1206;3216-18;3.2;0.2;1.6;0.2:0.1;1.8;hre_tbj_dla;K
    
    BULK INSERT [dbo].[xxx]
        FROM 'c:\Users\xxx\Documents\Work\xxx.csv'
        WITH
        (
        FIRSTROW = 2,
        FIELDTERMINATOR = ';',  --CSV field delimiter
        ROWTERMINATOR = '\n',   --Use to shift the control to next row
        ERRORFILE = 'c:\Users\xxx\Documents\Work\xxx_error.csv',
        TABLOCK
        );
    

    一切正常

    请尝试仅导入一行数据。这样行吗?如果不起作用,请将所有映射更改回
    nvarchar
    ,然后一次更改一列并导入。这样做,直到您发现有问题的列映射,然后希望它应该/可能会变得更加明显,为什么该值不能转换为所需的类型。↑ (续)如果第一行使用映射,则其中一行中存在意外值,由您确定哪一行包含异常。可能是缺少/额外的
    分层或某个值根本不正确。隐藏列名,然后不给我们一个简单的方法来告诉哪些列映射到图像中的哪些列,这对我们来说并不容易。我也不确定您希望通过不给我们列名来真正“隐藏”什么。我尝试了这个方法,但是对于每个数字类型的列,我都会遇到这个错误(其他列我设置为NVARCHAR),分隔符是;也可以(导入向导正确显示数据),我在应用程序中使用此文件,它也可以,而且如果我尝试将此文件上载到Oracle DB,一切都可以尝试在LibCalc或Excel上打开该平面文件,并将加载的数据保存/导出到CSV。之后,尝试加载该输出CSV文件。