Базиран SQL Server CSV импорт
1) Данните на CSV файла може да имат
,
(запетая) между тях (Например:описание), така че как мога да направя импортирането да обработва тези данни?
Решение
Ако използвате ,
(запетая) като разделител, тогава няма начин да се прави разлика между запетая като терминатор на полето и запетая във вашите данни. Бих използвал различен FIELDTERMINATOR
като ||
. Кодът ще изглежда така и това ще се справи перфектно със запетая и единична наклонена черта.
2) Ако клиентът създаде csv от excel, тогава данните, които имат запетая, са затворени в
" ... "
(двойни кавички) [като примера по-долу], така че как импортирането може да се справи с това?
Решение
Ако използвате BULK insert, тогава няма начин да се справите с двойни кавички, данните ще бъдат вмъкнати с двойни кавички в редове. След като вмъкнете данните в таблицата, можете да замените тези двойни кавички с „ '.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) Как да проследим, ако някои редове имат лоши данни, които импортирането пропуска? (импортирането пропуска ли редове, които не могат да бъдат импортирани)?
Решение
За да обработвате редове, които не са заредени в таблицата поради невалидни данни или формат, може да се манипулира с помощта на свойството ERRORFILE, посочете името на файла за грешка, той ще запише грешката при разпределяне на редове във файл за грешка. кодът трябва да изглежда така.
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
ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
TABLOCK
)