Поиск правильного маркера типа данных в BCP.FMT для массовой вставки T-SQL

#tsql #bulkinsert

#tsql #bulkinsert

Вопрос:

У меня есть файл bcp.fmt для массовой вставки в T-SQL (более переносимый и удобный для пользователя, чем SSIS), но я не знаю эквивалента SQLCHAR для столбца DATETIME в моей целевой таблице (как ни странно, я даже не могу получить ответ от Google). Как следствие, я получаю эту ошибку:

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

Это не необоснованная ошибка msg — мне просто нужно найти эквивалентную ссылку на целевой тип данных, верно?

Извлечение из файла FMT ниже:

4 SQLCHAR 0 8 «;» 4 Модифицируйте SQL_Latin1_General_CP1_CI_AS

Комментарии:

1. Вероятно, это проблема с форматом даты и времени в файле dd / mm / yyyy, в то время как sql server может ожидать формат mm / dd / yyyy.

2. Откуда берутся ваши исходные данные?

3. Это был всего лишь CSV-файл. В конце концов я отказался от файла формата: МАССОВАЯ ВСТАВКА dbo. StockLevelTMP ОТ ‘c:DataFile.csv ‘ С ПОМОЩЬЮ (FIELDTERMINATOR = ‘;’, ROWTERMINATOR = ‘n’, FIRSTROW = 2)

Ответ №1:

Используйте SQLCHAR, но установите правильный dateformat для ввода. например SET DATEFORMAT dmy;

УСТАНОВИТЕ DATEFORMAT (Transact-SQL)

Или, если вы управляете входным файлом, используйте формат ISO 8601 для однозначного ввода.