Ошибка преобразования данных массовой загрузки (усечение)

Я получаю эту ошибку

Bulk load data conversion error (truncation) for row 1, column 12 (is_download)

вот csv... он имеет только одну строку

30,Bill,Worthy,sales,,709888499,[email protected],,"Im a a people person., to work together for this new emerging env.HTTP://applesoftware.com","Bill and Son of Co","Contact Us: Contact Form",0

вот мое выражение о массовой вставке...

SE SalesLogix
GO

CREATE TABLE CSVTemp
(id INT,
firstname VARCHAR(255),
lastname VARCHAR(255),
department VARCHAR(255),
architecture VARCHAR(255),
phone VARCHAR(255),
email VARCHAR(255),
download VARCHAR(255),
comments VARCHAR(MAX),
company VARCHAR(255),
location VARCHAR(255),
is_download VARCHAR(255)
)
GO

BULK
INSERT CSVTemp
FROM 'c:\leads\leads.csv'
WITH
(
DATAFILETYPE = 'char', 
BATCHSIZE = 50, 
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
)
GO
--Check the content of the table.
SELECT *
FROM CSVTemp
GO

Проблема в том, что большую часть времени он отлично работает, но в некоторых ситуациях (это один из них) я получаю ошибки

Все идеи о том, что заставляет эту запись иметь эту ошибку

Ответ 1

Он собирает запятые в поле комментариев как разделители, потому что разделители несовместимы. Лучшим решением является обеспечение того, чтобы все поля были обернуты двойными кавычками, и установите FIELDTERMINATOR на '","'. В качестве альтернативы замените запятые на что-то маловероятное, чтобы быть в комментариях (например, ~) и установить FIELDTERMINATOR = '~'.

Ответ 2

В дополнение к комментариям Уил, похоже, что они видят все 12 столбцов, поэтому может быть просто неверно, что ваш гребцовщик. Во-первых, убедитесь, что программа, которая объединяет эти файлы, фактически возвращает карету в конце последней строки; Мне пришлось исправлять многие программы там, где это было не так. Как только вы убедитесь, что там есть возврат каретки, вам, возможно, придется поэкспериментировать, чтобы узнать, какой тип возврата каретки. Иногда это только char (10), иногда только char (13), и иногда он может иметь оба, но быть в неправильном порядке. Поэтому экспериментируйте с:

ROWTERMINATOR = '\n'
ROWTERMINATOR = '\r'
ROWTERMINATOR = '\n\r'
ROWTERMINATOR = '\r\n'

Ответ 3

System.Data.SqlClient.SqlException(0x80131904): Ошибка преобразования данных массовой загрузки (усечение) для строки 97, столбец 33

Для вышеуказанной ошибки вы можете проверить

  • Размер типа данных в столбце (например, VARCHAR (255)), если достаточно импортировать данные или нет.
  • И ограничитель строки, например
    • ROWTERMINATOR = '0x0A'
    • ROWTERMINATOR = '\n'
    • ROWTERMINATOR = '\ r\n'
  • FIELDTERMINATOR
    • Убедитесь, что выбранный полевой терминатор не встречается в данных. Если есть шанс, замените его другим символом, например | в файле.