Импорт файла CSV, содержащего символы канала. Ошибка говорит усечение
Я не самый острый инструмент в сарае, поэтому, пожалуйста, потерпите меня. Я пытаюсь импортировать CSV-файл в Microsoft SQL Server 2016. Однако всякий раз, когда я пытаюсь это сделать, я сталкиваюсь с ошибкой. Я думаю, что это может иметь отношение к персонажам трубы. На сайте, с которого я получил файл, было следующее:
Текстовые поля окружены символом "труба" (ascii 124). Дата и числовые поля не являются. Запятые разделяют все поля.
Вот как выглядит мой запрос:
CREATE TABLE cands16 (
[Cycle] [char](4) NOT NULL,
[FECCandID] [char] (9) NOT NULL,
[CID] [char] (9) NULL,
[FirstLastP] [varchar] (50) NULL,
[Party] [char] (1) NULL,
[DistIDRunFor] [char] (4) NULL,
[DistIDCurr] [char] (4) NULL,
[CurrCand] [char] (1) NULL,
[CRPICO] [char] (1) NULL,
[RecipCode] [char] (2) NULL,
[NoPacs] [char] (1) NULL
) ON [PRIMARY]
BULK
INSERT cands16
FROM 'C:\aaa open secrets\CampaignFin16\Cands16.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
Вот моя ошибка:
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 1, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 2, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 3, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 4, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 5, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 6, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 7, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 8, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 9, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 10, column 1 (Cycle).
Msg 4863, Level 16, State 1, Line 19
Bulk load data conversion error (truncation) for row 11, column 1 (Cycle).
Msg 4865, Level 16, State 1, Line 19
Cannot bulk load because the maximum number of errors (10) was exceeded.
Msg 7399, Level 16, State 1, Line 19
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 19
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
Вот детская версия моего файла CSV:
|2016|,|H4GA02060|,|N00035294|,|Greg Duke (R)|,|R|,|GA02|,| |,|Y|,|Y|,|C|,|RC|,| |
|2016|,|H4GA02078|,|N00036257|,|Vivian Childs (R)|,|R|,|GA02|,| |,| |,| |,| |,|RN|,| |
|2016|,|H4GA04116|,|N00035798|,|Thomas Brown (D)|,|D|,|GA04|,| |,| |,| |,| |,|DN|,| |
|2016|,|H4GA04124|,|N00035862|,|Thomas Wight (D)|,|D|,|GA07|,| |,| |,| |,| |,|DN|,| |
|2016|,|H4GA06087|,|N00026160|,|Tom Price (R)|,|R|,|GA06|,|GA06|,|Y|,|Y|,|I|,|RW|,| |
|2016|,|H4GA08067|,|N00026163|,|Lynn A Westmoreland (R)|,|R|,|GA03|,|GA03|,| |,|Y|,|I|,|RI|,| |
|2016|,|H4GA09065|,|N00036258|,|Bernard Fontaine (R)|,|R|,|GA09|,| |,| |,|Y|,|C|,|RL|,| |
|2016|,|H4GA10071|,|N00035370|,|Mike Collins (R)|,|R|,|GA10|,| |,| |,| |,| |,|RN|,| |
|2016|,|H4GA11046|,|N00035321|,|Susan Davis (R)|,|R|,|GA11|,| |,| |,| |,| |,|RN|,| |
2 ответа
Эта проблема касается размера колонн. Функция импорта предупреждает, что во время импорта должно быть выполнено усечение с потерянными данными в результате.
Увеличьте размер столбцов таблицы или удалите символ канала.
В следующей версии SQL Server вы можете использовать FIELDQUOTE
характер также. Это любезно задокументировано на странице, которая описывает версию начиная с SQL Server 2008, вероятно, чтобы сбить с толку случайных читателей:
BULK INSERT cands16
FROM 'C:\aaa open secrets\CampaignFin16\Cands16.txt'
WITH (FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIELDQUOTE = '|'
);
В то же время, мой лучший совет - загрузить данные в промежуточную таблицу, а затем разобрать столбцы в отдельные столбцы, удалив первый и последний символы.
Вы можете немного упростить это, используя '|,|'
в качестве разделителя полей и просто изменяя значения в первом и последнем столбце.