Массовая ошибка в поле даты, но вставка в работающий SQL Server - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь выполнить массовую вставку в таблицу, но получаю эту ошибку

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

Вот сценарий создания для моей таблицы

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[GST_TempDelete]
(
    [HEURE] [DATETIME] NULL,
    [Typebase] [FLOAT] NULL,
    [DATE] [DATETIME] NULL,
    [CHP] [NVARCHAR](4000) NULL,
    [tab] [NVARCHAR](4000) NULL,
    [ref1] [NVARCHAR](400) NULL,
    [ref2] [NVARCHAR](400) NULL
) ON [PRIMARY]
GO

Это содержимое файлаЯ пытаюсь использовать для массовой вставки

14:50:07|1|21/03/2019|SOMETEXT|PARAMbase|00000|54141|
14:50:07|1|21/03/2019|TEST|TEST|00000|54141|

Вот запрос массовой вставки

SET LANGUAGE FRENCH 

BULK INSERT GST_TempDelete   
FROM 'D:\TEST_DATA\TEMP\bulkInsert.txt' 
WITH (FIELDTERMINATOR ='|',ROWTERMINATOR = '|')

Когда я пытаюсь вставить данные с INSERT INTO, используя значения из файла массовой,это работает, но сам bulk insert продолжает давать сбой.

Вот запрос INSERT INTO:

INSERT INTO GST_TempDelete 
VALUES ('14:50:07', '1', '21/03/2019', 'TEST', 'TEST', '00000', '54141')

Пожалуйста, помогите мне решить эту проблему.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

14: 50: 07 | 1 | 21/03/2019 | SOMETEXT | PARAMbase | 00000 | 54141 |

Первый столбец в файле CSV явно в формате времени. Пока он имеет тип DATETIME в DDL таблицы. Таким образом, кажется, это будет изменено с DATETIME на TIME

CREATE TABLE [dbo].[GST_TempDelete](
    [HEURE] [time] NULL,
    [Typebase] [float] NULL,
    [DATE] [datetime] NULL,
    [CHP] [nvarchar](4000) NULL,
    [tab] [nvarchar](4000) NULL,
    [ref1] [nvarchar](400) NULL,
    [ref2] [nvarchar](400) NULL
) ON [PRIMARY]
GO

SET LANGUAGE FRENCH 
BULK INSERT GST_TempDelete   FROM 'D:\TEST_DATA\TEMP\bulkInsert.txt' WITH (FIELDTERMINATOR ='|',ROWTERMINATOR = '|')

Когда я пытаюсь вставить данные с помощью Вставить в, используя значения из массовый файл, он работает, но сама массовая вставка продолжает давать сбой

Это может быть потому, что:

BULK INSERT обеспечивает строгую проверку данных и проверку данных читать из файла, который может вызвать сбой существующих сценариев, когда они выполняются на недействительных данных.

Ссылка: https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017

0 голосов
/ 21 марта 2019

Получил вопрос: это для столбца даты.'21 / 03/2019 'является правильным значением.

SET DATEFORMAT dmy;
insert into GST_TempDelete values('14:50:07','1.0','21/03/2019','TEST','TEST','00000','54141')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...