2013-02-20 3 views
1

У меня есть CSV, отделенный файл, содержащие сотни тысяч записей в следующем формате:SQL Bulk Вставить CSV

3212790556,1,0.000000,,0 
3212790557,2,0.000000,,0 

Теперь, используя метод плоского файла SQL Server Импорт работает только денди. Я могу редактировать sql, чтобы имена таблиц и столбцов были чем-то значимым. Кроме того, я также редактирую тип данных из varchar по умолчанию (50) в int или десятичный. Все это прекрасно работает, и импорт sql импортируется успешно.

Однако я не могу это сделать ту же самую задачу с помощью Bulk Insert Query, который выглядит следующим образом:

BULK 
INSERT temp1 
FROM 'c:\filename.csv' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 

Этот запрос возвращает следующие 3 ошибки, которые я не имею ни малейшего представления о том, как решить:

Msg 4866, Level 16, State 1, Line 1 
The bulk load failed. The column is too long in the data file for row 1, column 5. Verify that the field terminator and row terminator are specified correctly. 
Msg 7399, Level 16, State 1, Line 1 
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 1 
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)". 

Цель моего приложения заключается в том, что в папке есть несколько файлов csv, которые все должны подниматься в одной таблице, чтобы я мог запрашивать сумму значений. На данный момент я подумывал написать программу на C#, которая выполнит вставку BULK в цикле (в соответствии с количеством файлов), а затем вернется обратно с моими результатами. Я предполагаю, что мне не нужно писать код, и я могу просто написать сценарий, который сделает все это - любой может привести меня к правильному пути :)

Большое спасибо.

Edit: просто добавил

ERRORFILE = 'C:\error.log' 

на запрос, и я получаю 5221 строк, вставленных. Несколько раз его 5222 несколько раз его 5222, но он просто выходит за пределы этого момента. Не знаю, в чем проблема? CSV отлично работает.

ответ

2

SOB. WTF !!!

Я не могу поверить, что замена \ n на «0x0A» в ROWTERMINATOR сработала !!! Я имею в виду серьезно. Я просто попробовал, и это сработало. WTF момент! Полностью.

Однако, что немного интересно, так это то, что мастер импорта SQL также содержит около 10 секунд для импорта. Импортный запрос занял более минуты. Любые догадки ???

+0

Не знаю точно, но это похоже на ошибку. Возможно, MS не проверила указание «ROWTERMINATOR = '\ n'', так как \ n является значением по умолчанию. Готов поспорить, что это сработает, если вы выйдете из предложения ROWTERMINATOR. Что касается разницы в производительности, что произойдет, если вы добавите предложение BATCHSIZE? Я уверен, что мастер импорта использует его. –

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