Ошибка преобразования данных при массовой загрузке с помощью CSV-файла в SQL Server 2016 - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть .csv файл.Я хочу импортировать его в свою базу данных SQL Server с именем Unisoft_kef, но получаю следующие ошибки:

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 1, столбца 8 (stQuant).

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимое значение)символ для указанной кодовой страницы) для строки 2, столбца 10 (stPrice).

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанногокодовая страница) для строки 3, столбца 10 (stPrice).

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки4, столбец 10 (stPrice).

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 5, столбец 45(stFpaVal).

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 6, столбца 10 (stPrice).

Сообщение 4864, Уровень 16, Состояние 1, Строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 7, столбца 10 (stPrice).

Сообщение 4864, Уровень 16, Состояние 1, Строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 8, столбца 10 (stPrice).

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 9, столбца 10 (stPrice).

Сообщение 4864, Уровень 16, Состояние 1, Строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 10, столбца 10 (stPrice).

Сообщение 4864, уровень 16, состояние 1, строка 79
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 11, столбца 10 (stPrice).

Сообщение 4865, Уровень 16, Состояние 1, Строка 79
Невозможно выполнить массовую загрузку, поскольку превышено максимальное количество ошибок (10).

Сообщение 7399, Уровень 16, Состояние 1,Строка 79
Поставщик OLE DB "BULK" для связанного сервера "(null)" сообщил об ошибке.Поставщик не предоставил никакой информации об ошибке.

Сообщение 7330, Уровень 16, Состояние 2, Строка 79
Невозможно извлечь строку из поставщика OLE DB "BULK" для связанного сервера "(null)".

Точный запрос, который я использую:

USE [Unisoft_KEF]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

BEGIN
    DROP TABLE Poliseis_STRN

    CREATE TABLE [dbo].[Poliseis_STRN]
    (
        [stFileId] [INT] NULL ,
        [stDate] [NVARCHAR](50) NULL,
        [sFileId] [NVARCHAR](50) NULL,
        [stTransKind] [NVARCHAR](50) NULL,
        [stDoc] [NVARCHAR](50) NULL,
        [stLocation] [NVARCHAR](50) NULL,
        [stCustSuppl] [NVARCHAR](50) NULL,
        [stQuant] [FLOAT] NULL,
        [stQuant2] [FLOAT] NULL,
        [stPrice] [FLOAT] NULL,
        [stDiscount] [NVARCHAR](50) NULL,
        [stValue] [FLOAT] NULL,
        [stComment] [NVARCHAR](50) NULL,
        [stComment2] [NVARCHAR](50) NULL,
        [stSalesman] [NVARCHAR](50) NULL,
        [stForCncy] [NVARCHAR](50) NULL,
        [stFCPrice] [FLOAT] NULL,
        [stFCValue] [FLOAT] NULL,
        [stFromFile] [NVARCHAR](50) NULL,
        [stPrinted] [NVARCHAR](50) NULL,
        [stVATid] [NVARCHAR](50) NULL,
        [stFromGroup] [NVARCHAR](50) NULL,
        [stDocOrigin] [NVARCHAR](50) NULL,
        [stInsDate] [NVARCHAR](50) NULL,
        [stUserId] [NVARCHAR](50) NULL,
        [stGLUpdated] [NVARCHAR](50) NULL,
        [stLotDelete] [NVARCHAR](50) NULL,
        [stThirdPart] [NVARCHAR](50) NULL,
        [stFiller1] [NVARCHAR](50) NULL,
        [stLotCode] [NVARCHAR](50) NULL,
        [stLotDate] [NVARCHAR](50) NULL,
        [strcost] [NVARCHAR](50) NULL,
        [stTime] [NVARCHAR](50) NULL,
        [stOtherExp] [NVARCHAR](50) NULL,
        [stWeight] [NVARCHAR](50) NULL,
        [stVolume] [NVARCHAR](50) NULL,
        [stImpClass] [NVARCHAR](50) NULL,
        [stEFK] [NVARCHAR](50) NULL,
        [stDocLine] [NVARCHAR](50) NULL,
        [stDocOthEx] [NVARCHAR](50) NULL,
        [stFCDocOEx] [NVARCHAR](50) NULL,
        [stMarkupg] [NVARCHAR](50) NULL,
        [stMarkupr] [NVARCHAR](50) NULL,
        [stProdId] [NVARCHAR](50) NULL,
        [stFpaVal] [FLOAT] NULL,
        [strSearchCode] [NVARCHAR](50) NULL,
        [stTextHandle] [NVARCHAR](50) NULL,
        [stVM1Origin] [NVARCHAR](50) NULL,
        [stBM1Origin] [NVARCHAR](50) NULL,
        [stNmCostOrigin] [NVARCHAR](50) NULL,
        [stNmSpInvOrigin] [NVARCHAR](50) NULL,
        [stNtSpInvOrigin] [NVARCHAR](50) NULL,
        [stI nputQuantFlag] [NVARCHAR](50) NULL,
        [stInputValFlag] [NVARCHAR](50) NULL,
        [stOutputQuantFlag] [NVARCHAR](50) NULL,
        [stOutputValFlag] [NVARCHAR](50) NULL,
        [stCancelledFlag] [NVARCHAR](50) NULL,
        [stCancelFlag] [NVARCHAR](50) NULL,
        [FlagsSet] [NVARCHAR](50) NULL,
        [sdInsDate] [NVARCHAR](50) NULL,
        [Expression] [NVARCHAR](50) NULL,
        [Expression1] [NVARCHAR](50) NULL,
        [sdRelDoc] [NVARCHAR](50) NULL,
        [stVatId1] [NVARCHAR](50) NULL
    )

    BULK INSERT Poliseis_STRN
    FROM 'C:\MRP_Import_Files\Unisoft_KEF_TempFiles\2018.xlsm-STRN.csv'
    WITH
    (
        CODEPAGE = '1253',
        FIELDTERMINATOR = ';',
        CHECK_CONSTRAINTS
    ) 
END

, и вот пример CSV, который я пытаюсь импортировать:

stFileId;stDate;sFileId;stTransKind;stDoc;stLocation;stCustSuppl;stQuant;stQuant2;stPrice;stDiscount;stValue;stComment;stComment2;stSalesman;stForCncy;stFCPrice;stFCValue;stFromFile;stPrinted;stVATid;stFromGroup;stDocOrigin;stInsDate;stUserId;stGLUpdated;stLotDelete;stThirdPart;stFiller1;stLotCode;stLotDate;strcost;stTime;stOtherExp;stWeight;stVolume;stImpClass;stEFK;stDocLine;stDocOthEx;stFCDocOEx;stMarkupg;stMarkupr;stProdId;stFpaVal;strSearchCode;stTextHandle;stVM1Origin;stBM1Origin;stNmCostOrigin;stNmSpInvOrigin;stNtSpInvOrigin;stInputQuantFlag;stInputValFlag;stOutputQuantFlag;stOutputValFlag;stCancelledFlag;stCancelFlag;FlagsSet;sdInsDate;Expression;Expression1;sdRelDoc;stVatId1
1;2/1/2018;718;8;TΔ1000001;1;01C.000001739;500;100;0,36;0;180;DELIFRANCE HELLAS AE/;;;;0,36;180;1;0;1;0;1;02/01/2018 00:00;27;0;0;0;0;;;168,08;00/01/1900 00:00;0;0;0;;0;1;0;0;0;0;0;23,40023442;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;1
2;2/1/2018;733;8;TΔ1000001;1;01C.000001739;480;80;0,69;0;331,2;DELIFRANCE HELLAS AE/;;;;0,69;331,2;1;0;1;0;1;02/01/2018 00:00;27;0;0;0;0;;;288;00/01/1900 00:00;0;0;0;;0;2;0;0;0;0;0;43,05643194;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;1
3;2/1/2018;729;8;TΔ1000001;1;01C.000001739;420;70;0,605;0;254,1;DELIFRANCE HELLAS AE/;;;;0,605;254,1;1;0;1;0;1;02/01/2018 00:00;27;0;0;0;0;;;263,34;00/01/1900 00:00;0;0;0;;0;3;0;0;0;0;0;33,03333363;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;1
4;2/1/2018;6017;8;TΔ1000001;1;01C.000001739;3;0;8;0;24;DELIFRANCE HELLAS AE/;;;;8;24;1;0;21;0;1;02/01/2018 00:00;27;0;0;0;0;;;19,07;00/01/1900 00:00;0;0;0;;0;4;0;0;0;0;0;5,76;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;21
5;3/1/2018;1152;132;ΣΔ1000001;1;99C.000000017;10;0;4,2;0;42;ΔIAΦOPOI/;;;;4,2;42;1;0;21;0;2;02/01/2018 00:00;25;0;0;0;0;;;0;00/01/1900 00:00;0;0;0;;0;1;0;0;0;0;0;10,07994403;;;2;;;;0;0;0;0;0;0;0;1100000000000000000000000000000000000000000000000000000000000000;02/01/2018 00:00;11;12;HΣ1000001;21
6;3/1/2018;5000;132;ΣΔ1000001;1;99C.000000017;180;0;0,36;0;64,8;ΔIAΦOPOI/;;;;0,36;64,8;1;0;21;0;2;02/01/2018 00:00;25;0;0;0;0;;;0;00/01/1900 00:00;0;0;0;;0;2;0;0;0;0;0;15,55191238;;;2;;;;0;0;0;0;0;0;0;1100000000000000000000000000000000000000000000000000000000000000;02/01/2018 00:00;11;12;HΣ1000001;21
7;3/1/2018;5001;132;ΣΔ1000001;1;99C.000000017;55;0;0,53;0;29,15;ΔIAΦOPOI/;;;;0,53;29,15;1;0;21;0;2;02/01/2018 00:00;25;0;0;0;0;;;0;00/01/1900 00:00;0;0;0;;0;3;0;0;0;0;0;6,995960797;;;2;;;;0;0;0;0;0;0;0;1100000000000000000000000000000000000000000000000000000000000000;02/01/2018 00:00;11;12;HΣ1000001;21

Я управляючтобы успешно импортировать его, только когда я использую varchar или nvarchar во всех столбцах таблицы, но это неверно, поскольку поля количества и значения являются только числовыми, и я должен использовать их в запросах суммы после импорта.

Любая помощьбыло бы здорово.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Распространенная ошибка, которую делает пользователь, заключается в том, что файл сохраняется локально (на его компьютере), а команда выполняется на удаленном экземпляре SQL Server.В результате вы получаете эту ошибку.Перейдите по следующей ссылке, это может вам помочь: https://blog.sqlauthority.com/2014/11/13/sql-server-fix-msg-4864-level-16-state-1-bulk-load-data-conversion-error/

0 голосов
/ 18 сентября 2018

Основная проблема находится внутри самого файла.Вы используете запятые (",") для десятичного разделителя.Если вы хотите вставить некоторые данные как плавающие, вы должны заменить запятые на точки (".").Насколько я знаю, вы не можете изменить десятичный разделитель для BULK INSERT из стандартного разделителя точек, и вы должны следовать правилам синтаксиса sql по умолчанию.

Другой способ - вставить данные как varchar, а затем скопировать их (например,другая функция INSERT) во вторую таблицу с правильными типами, используя REPLACE с функциями CAST / CONVERT.Например:

CAST(REPLACE(stQuant,',','.') AS FLOAT)

Другая проблема с файлом, который вы разместили, - это столбец "FlagsSet".Данные в вашем файле длиннее 50 символов, поэтому вам следует переопределить определение столбца.Я просто поставил max:

[FlagsSet] [nvarchar](MAX) NULL

После замены всех запятых и изменения определения столбца "FlagsSet" все работает гладко.

Вот исправленный файл:

1;2/1/2018;718;8;TΔ1000001;1;01C.000001739;500;100;0.36;0;180;DELIFRANCE HELLAS AE/;;;;0.36;180;1;0;1;0;1;02/01/2018 00:00;27;0;0;0;0;;;168.08;00/01/1900 00:00;0;0;0;;0;1;0;0;0;0;0;23.40023442;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;1
2;2/1/2018;733;8;TΔ1000001;1;01C.000001739;480;80;0.69;0;331.2;DELIFRANCE HELLAS AE/;;;;0.69;331.2;1;0;1;0;1;02/01/2018 00:00;27;0;0;0;0;;;288;00/01/1900 00:00;0;0;0;;0;2;0;0;0;0;0;43.05643194;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;1
3;2/1/2018;729;8;TΔ1000001;1;01C.000001739;420;70;0.605;0;254.1;DELIFRANCE HELLAS AE/;;;;0.605;254.1;1;0;1;0;1;02/01/2018 00:00;27;0;0;0;0;;;263.34;00/01/1900 00:00;0;0;0;;0;3;0;0;0;0;0;33.03333363;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;1
4;2/1/2018;6017;8;TΔ1000001;1;01C.000001739;3;0;8;0;24;DELIFRANCE HELLAS AE/;;;;8;24;1;0;21;0;1;02/01/2018 00:00;27;0;0;0;0;;;19.07;00/01/1900 00:00;0;0;0;;0;4;0;0;0;0;0;5.76;;;1;;;;0;0;0;1;1;0;0;1100110111000100000100000000000000000000000000000000000000000000;02/01/2018 00:00;10;30;;21
5;3/1/2018;1152;132;ΣΔ1000001;1;99C.000000017;10;0;4.2;0;42;ΔIAΦOPOI/;;;;4.2;42;1;0;21;0;2;02/01/2018 00:00;25;0;0;0;0;;;0;00/01/1900 00:00;0;0;0;;0;1;0;0;0;0;0;10.07994403;;;2;;;;0;0;0;0;0;0;0;1100000000000000000000000000000000000000000000000000000000000000;02/01/2018 00:00;11;12;HΣ1000001;21
6;3/1/2018;5000;132;ΣΔ1000001;1;99C.000000017;180;0;0.36;0;64.8;ΔIAΦOPOI/;;;;0.36;64.8;1;0;21;0;2;02/01/2018 00:00;25;0;0;0;0;;;0;00/01/1900 00:00;0;0;0;;0;2;0;0;0;0;0;15.55191238;;;2;;;;0;0;0;0;0;0;0;1100000000000000000000000000000000000000000000000000000000000000;02/01/2018 00:00;11;12;HΣ1000001;21
7;3/1/2018;5001;132;ΣΔ1000001;1;99C.000000017;55;0;0.53;0;29.15;ΔIAΦOPOI/;;;;0.53;29.15;1;0;21;0;2;02/01/2018 00:00;25;0;0;0;0;;;0;00/01/1900 00:00;0;0;0;;0;3;0;0;0;0;0;6.995960797;;;2;;;;0;0;0;0;0;0;0;1100000000000000000000000000000000000000000000000000000000000000;02/01/2018 00:00;11;12;HΣ1000001;21

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...