Невозможно получить строку из поставщика OLE DB "BULK" для связанного сервера "(null)" - программирование

Невозможно получить строку из поставщика OLE DB "BULK" для связанного сервера "(null)"

Я пытаюсь загрузить свою базу данных с большим количеством данных из файла .csv размером 1,4 ГБ. Но когда я пытаюсь запустить свой код, я получаю ошибки.

Здесь мой код:

USE [Intradata NYSE] 
GO
CREATE TABLE CSVTest1
(Ticker varchar(10) NULL,
dateval date NULL,
timevale time(0) NULL,
Openval varchar(10) NULL,
Highval varchar(10) NULL,
Lowval varchar(10) NULL,
Closeval varchar(10) NULL,
Volume varchar(10) NULL
)
GO

BULK
INSERT CSVTest1
FROM 'c:\intramerge.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest1
GO
--Drop the table to clean up database.
DROP TABLE CSVTest1
GO

Я пытаюсь создать базу данных с большим количеством акций. Но я получаю это сообщение об ошибке:

Msg 4832, уровень 16, состояние 1, строка 2 Массовая нагрузка: неожиданный конец файл был обнаружен в файле данных. Msg 7399, уровень 16, состояние 1, Строка 2 Поставщик OLE DB "BULK" для связанного сервера "(null)" сообщил ошибка. Поставщик не предоставил никакой информации о Ошибка. Msg 7330, уровень 16, состояние 2, строка 2 Не удается получить строку из Поставщик OLE DB "BULK" для связанного сервера "(null)"

Я не очень разбираюсь в SQL, но я надеюсь поймать кое-что. Надеюсь, что кто-то посмотрит, что может быть очень очевидно.

4b9b3361

Ответ 1

Воскрешая старый вопрос, но в случае, если это поможет кому-то другому: после долгих проб и ошибок я наконец (наконец!) смог избавиться от этой ошибки, изменив это:

ROWTERMINATOR = '\n'

Для этого:

ROWTERMINATOR = '0x0A'

Ответ 2

У меня была такая же проблема.

Решение:

Проверьте CSV или текстовый файл в текстовых редакторах, таких как блокнот+. Последняя строка может быть неполной. Удалите его.

Ответ 3

Я получил ту же ошибку, когда у меня было другое количество полей с разделителями в моем CSV, чем у столбцов, которые у меня были в моей таблице. Проверьте, есть ли у вас правильное количество полей в intramerge.csv.

Ответ 4

Я получил эту ошибку, когда мой файл формата (т.е. с использованием параметра FORMATFILE) имел ширину столбца, которая была меньше фактического размера столбца (например, varchar(50) вместо varchar(100)).

Ответ 5

Это был старый вопрос, но кажется, что мой вывод поможет другим людям, имеющим аналогичную проблему.

Значение тайм-аута SSIS по умолчанию составляет 30 секунд. Это приводит к тому, что любая связанная с обслуживанием или связанная с IO операция в вашем пакете выходит за пределы этого значения таймаута и вызывает тайм-аут. Увеличение этого значения тайм-аута (изменение на "0" без тайм-аута) решит проблему.

Ответ 6

Я получил это исключение, когда поле char в моей таблице SQL было слишком маленьким для ввода текста. Попробуйте сделать столбец больше.

Ответ 7

Я столкнулся с подобной проблемой, но в этом случае загружаемый файл содержал несколько пустых строк. Удаление пустых строк решило это.

В качестве альтернативы, поскольку файл был разделен, я добавил правильное количество разделителей в пустые строки, что снова позволило файлу успешно импортировать - используйте эту опцию, если необходимо загрузить пустые строки.

Ответ 8

Это может быть плохая идея с полным 1,5 ГБ, но вы можете попробовать ее на подмножестве (начать с нескольких строк):

CREATE TABLE CSVTest1
(Ticker varchar(MAX) NULL,
    dateval varchar(MAX) NULL,
    timevale varchar(MAX) NULL,
    Openval varchar(MAX) NULL,
    Highval varchar(MAX) NULL,
    Lowval varchar(MAX) NULL,
    Closeval varchar(MAX) NULL,
    Volume varchar(MAX) NULL
)

... сделайте свой BULK INSERT, затем

SELECT MAX(LEN(Ticker)),
    MAX(LEN(dateval)),
    MAX(LEN(timevale)),
    MAX(LEN(Openval)),
    MAX(LEN(Highval)),
    MAX(LEN(Lowval)),
    MAX(LEN(Closeval)),
    MAX(LEN(Volume))

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

Ответ 9

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

Ответ 10

Это мое решение: просто сдавайся.

Я всегда заканчиваю тем, что использую SSMS и [ Tasks > Import Data ].

Мне никогда не удавалось получить реальный файл .csv для импорта с использованием этого метода. Это совершенно бесполезная функция, которая работает только с нетронутыми наборами данных, которые не существуют в реальном мире. Возможно, мне никогда не везло, потому что наборы данных, с которыми я имею дело, довольно грязные и генерируются третьими лицами.

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

Microsoft, возможно, добавит несколько сообщений об ошибках, поэтому она говорит, почему она отклонила это? Потому что почти невозможно решить проблему, если вы не знаете, почему она не удалась!