Импортиране на CSV файл в SQL Server
Търся помощ, за да импортирам файл .csv
в SQL Server с помощта на BULK INSERT
и имам няколко основни въпроса.
Въпроси:
-
Данните в CSV файла могат да съдържат
,
(запетая) между тях (напр.: описание), така че как мога да направя импорт, обработващ тези данни? -
Ако клиентът създаде CSV файла от Excel, тогава данните, които имат запетая, се затварят в
""
(двойни кавички) [както в примера по-долу], така че как импортът може да се справи с това? -
Как да проследим дали някои редове имат лоши данни, които импортът пропуска? (прескача ли импортът редове, които не могат да бъдат импортирани)
Ето примера на CSV със заглавието:
Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.
И SQL заявка за импортиране:
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
168
3
Импортиране на CSV на базата на SQL Server
Решение
Ако използвате
,
(запетая) като разделител, тогава няма как да разграничите запетаята като терминатор на полето и запетаята в данните. Бих използвал другFIELDTERMINATOR
, например||
. Кодът би изглеждал по следния начин и той ще се справи перфектно със запетаята и единичната наклонена черта.Решение
Ако използвате BULK insert, тогава няма как да се справите с двойните кавички, данните ще бъдат ще бъдат вмъкнати с двойни кавички в редовете. След като вмъкнете данните в таблицата, можете да замените тези двойни кавички с '` `'.
Решение
За да се справят редовете, които не се зареждат в таблицата поради невалидни данни или формат, може да се да се обработи с помощта на свойството ERRORFILE, посочете името на файла за грешки, той ще запише редовете кодът трябва да изглежда така.
Най-добрият, най-бързият и най-лесният начин за решаване на проблема със запетаята в данните е да използвате Excel, за да запишете файл, разделен със запетая, след като сте задали настройка на разделителя на списъци в Windows' на нещо различно от запетая (например тръба). Това ще генерира за вас файл, разделен с тръба (или какъвто и да е друг файл), който можете да импортирате. Това е описано тук.
Първо трябва да импортирате CSV файл в таблицата с данни
След това можете да вмъкнете насипни редове, като използвате SQLBulkCopy