Bazujący na SQL Server import CSV
1) Dane pliku CSV mogą mieć ,
(przecinek) pomiędzy (np.:opis), więc jak mogę dokonać importu obsługującego te dane?
Rozwiązanie
Jeśli używasz ,
(przecinek) jako ogranicznik, to nie ma sposobu na odróżnienie przecinka jako terminatora pola od przecinka w danych. Użyłbym innego FIELDTERMINATOR
jak ||
. Kod wyglądałby tak, że doskonale poradzi sobie z przecinkiem i pojedynczym ukośnikiem.
2) Jeśli klient utworzy plik csv z programu Excel, dane, które mają przecinek, są ujęte w " ... "
(podwójne cudzysłowy) [jak w poniższym przykładzie], więc jak import może to obsłużyć?
Rozwiązanie
Jeśli używasz wstawiania BULK, nie ma możliwości obsługi podwójnych cudzysłowów, dane zostaną wstawione z podwójnymi cudzysłowami do wierszy. Po wstawieniu danych do tabeli możesz zastąpić te podwójne cudzysłowy ' '.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) W jaki sposób śledzimy, czy niektóre wiersze mają złe dane, które importowane pomijają? (czy import pomija wiersze, których nie można zaimportować)?
Rozwiązanie
Aby obsłużyć wiersze, które nie są ładowane do tabeli z powodu nieprawidłowych danych lub formatu, mogą być obsługiwane za pomocą właściwości ERRORFILE, podaj nazwę pliku błędu, zapisze on błąd współdzielenia wierszy w pliku błędu. kod powinien wyglądać.
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
)