2016-04-20 6 views
0

Я использую команду объемной вставки для SQL Server, но по какой-то причине первая строка не вставлена. Почему я не могу вставить данные из первой строки? Является ли объемная вставка ожиданием заголовков по умолчанию и как я могу обойти это? Если я добавлю фиктивную строку и установил WITH в FIRSTROW = 2, тогда первая строка вставлена ​​без проблем, но я не думаю, что это приятное решение.Вложенная команда SQL не может вставить первую строку

Код ошибки:

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

Команда:

BULK INSERT TableData 
FROM 'C:\Users\Oscar\file.csv' 
WITH (FIELDTERMINATOR = ';', 
     ROWTERMINATOR = '\n', 
     KEEPNULLS, 
     KEEPIDENTITY) 

Образец данных:

1;Text 1;1;0;; 
2;Text 2;1;0;; 
3;Text 3;1;0;; 
4;Text 4;1;0;; 
5;Text 5;1;0;; 
+3

Вы пытались использовать «ROWTERMINATOR» of \ r \ n? Возможно, когда вы открываете файл в любом редакторе, который используете, а затем сохраняете его, он автоматически преобразует его из одного ограничителя строк в другой и фиксирует эту проблему, в то время как заголовок не имеет к этому никакого отношения. Просто догадка, но то, что я видел раньше. –

+1

@TomH У меня была такая же проблема. Я нахожу использование чего-то вроде Notepad ++ и показывая, что все символы делают импорт таким же простым, как вы можете видеть вкладки, возврат каретки, переводы строк и т. Д. – UnhandledExcepSean

+0

@TomH '\ r \ n' не работает, это была ошибка кодирования. Изменен из UTF-8-BOM в ANSI и \ n. – Ogglas

ответ

2

Сценарий, вероятно, UTF-8, и вы пытаетесь загрузить его из ЦМД с ф-1252 или что-то, UTF-Бом на начинающий отвлекает переводчика. Посмотрите с гекседектором, и вы его увидите.

Сохраните как ANSI и повторите попытку.

+0

Это был UTF-8-BOM, и я видел его непосредственно при просмотре в HEX-редакторе. Черт возьми, '0xEF 0xBB 0xBF' – Ogglas

0

У меня были проблемы с переводом строки/возврат каретки Line Feed, это может быть вопрос здесь. Для Line Feed я должен был использовать Row терминатор 0x0a:

BULK INSERT TableData 
FROM 'C:\Users\Oscar\file.csv' 
WITH (
FIELDTERMINATOR = ';', 
ROWTERMINATOR = '0x0a', 
KEEPNULLS, 
KEEPIDENTITY) 

 Смежные вопросы

  • Нет связанных вопросов^_^