Więcej
Import pliku CSV do SQL Server
Szukam pomocy w zaimportowaniu pliku .csv
do SQL Server przy użyciu BULK INSERT
i mam kilka podstawowych pytań.
Zagadnienia:
-
Dane w pliku CSV mogą mieć
,
(przecinek) pomiędzy (np.: opis), więc jak mogę wykonać import obsługujący te dane? -
Jeśli klient tworzy CSV z Excela to dane, które mają przecinki są zamknięte w
""
(cudzysłów) [jak poniższy przykład] więc jak import może sobie z tym poradzić? -
Jak możemy śledzić, czy niektóre wiersze mają złe dane, które import pomija? (czy import pomija wiersze, które nie nadają się do importu)
Oto przykładowy CSV z nagłówkiem:
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.
Oraz instrukcja SQL do importu:
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
Import CSV z serwera SQL
Rozwiązanie
Jeśli używasz
,
(przecinka) jako separatora, to nie ma sposobu na rozróżnienie pomiędzy przecinkiem jako terminatorem pola a przecinkiem w danych. Użyłbym innegoFIELDTERMINATORA
jak||
. Kod wyglądałby jak i to będzie obsługiwać przecinki i pojedyncze ukośniki idealnie.Rozwiązanie
Jeśli używasz BULK insert to nie ma sposobu na obsługę podwójnych cudzysłowów, dane będą wstawione z podwójnymi cudzysłowami do wierszy. Po wstawieniu danych do tabeli mógłbyś zastąpić te podwójne cudzysłowy przez '`'.
Rozwiązanie
Aby obsłużyć wiersze, które nie są'załadowane do tabeli z powodu nieprawidłowych danych lub formatu, można by obsłużyć używając właściwość ERRORFILE, podając nazwę pliku błędu, spowoduje to zapisanie wierszy z błędem do pliku z błędami. kod powinien wyglądać tak.
Najlepszym, najszybszym i najprostszym sposobem na rozwiązanie problemu przecinków w danych jest użycie programu Excel do zapisania pliku oddzielonego przecinkami po ustawieniu w systemie Windows' ustawienia separatora listy na coś innego niż przecinek (np. rura). Spowoduje to wygenerowanie pliku rozdzielonego za pomocą rury (lub dowolnego innego), który można następnie zaimportować. Jest to opisane tutaj.
Najpierw należy zaimportować plik CSV do tabeli danych.
Następnie możesz wstawić większą ilość wierszy używając SQLBulkCopy