SQL Server BULK INSERT - Вставка значений DateTime

У меня есть 6 миллионов строк данных, которые я хочу вставить в свою базу данных SQL Server . Я могу сделать это медленно, используя 6 миллионов операторов INSERT (по моим расчетам, это займет 18 часов), или я могу попробовать BULK INSERT.

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

Однако SQL Server, похоже, не любит вставлять какие-либо данные даты / времени в поле.

Вот таблица (psuedo -SQL)

CREATE TABLE Tasks (
    TaskId bigint NOT NULL IDENTITY(1,1) PRIMARY KEY,
    TriggerId bigint NOT NULL FOREIGN KEY,
    Created datetime NOT NULL,
    Modified datetime NOT NULL,
    ScheduledFor datetime NULL,
    LastRan datetime NULL,
    -- and about 10 more fields after this
)

Вот мой оператор BULK INSERT:

SET DATEFORMAT dmy
BULK INSERT Tasks
FROM 'C:\TasksBulk.dat'
WITH (
    -- CHECK_CONSTRAINTS is not necessary as the only constraints are always enforced regardless of this option (UNIQUE, PRIMARY KEY, and NOT NULL)
    CODEPAGE = 'RAW',
    DATAFILETYPE = 'native',

    KEEPIDENTITY,
    MAXERRORS = 1,
    ORDER ( CallId ASC ),

    FIELDTERMINATOR = '\t',
    ROWTERMINATOR   = '\0'
)

А вот первая строка данных в TasksBulk.dat:

1000\t1092\t01/01/2010 04:00:17\t01/01/2010 04:00:17\t\t01/01/2010 04:00:14\0

(Для удобства чтения переформатирован, символы табуляции заменены на 4 пробела :)

1000    1092    01/01/2010 04:00:17    01/01/2010 04:00:17        01/01/2010 04:00:14\0

Однако когда я запускаю инструкцию BULK INSERT, я получаю эту ошибку:

Msg 4864, Level 16, State 1, Line 2 Ошибка преобразования данных массовой загрузки. (несоответствие типа или недопустимый символ для указанной кодовой страницы) для строка 1, столбец 3 (Создано).

Я пробовал использовать разные терминаторы строк и полей и все разные форматы даты и времени (включая «01.01.2010», «01.01.2010», как с, так и без компонент времени «04:00:17»). Не знаю, что я здесь делаю не так.

6
задан Dai 6 February 2018 в 00:13
поделиться