Szukam pomocy w zaimportowaniu .csv
pliku do programu SQL Server BULK INSERT
i mam kilka podstawowych pytań.
Zagadnienia:
Dane pliku CSV mogą zawierać
,
(przecinek) pomiędzy (np. Opis), więc jak mogę dokonać importu obsługującego te dane?Jeśli klient utworzy plik CSV z Excela, dane zawierające przecinek są ujęte w
""
(podwójny cudzysłów) [jak w poniższym przykładzie], więc jak import może sobie z tym poradzić?Jak śledzić, czy niektóre wiersze zawierają złe dane, które importują pomijają? (czy import pomija wiersze, których nie można importować)
Oto przykładowy plik 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.
I instrukcja SQL do zaimportowania:
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
)
sql
sql-server
csv
bulkinsert
bulk
Prabhat
źródło
źródło
BULK NSERT
lub nie masz do nich uprawnień).Odpowiedzi:
Oparty na SQL Server import CSV
Rozwiązanie
Jeśli używasz
,
(przecinka) jako separatora, nie ma sposobu, aby odróżnić przecinek jako terminator pola od przecinka w danych. Chciałbym użyć innegoFIELDTERMINATOR
podobnego||
. Kod wyglądałby tak, a idealnie poradzi sobie z przecinkiem i pojedynczym ukośnikiem.Rozwiązanie
Jeśli używasz wstawiania BULK, nie ma sposobu na obsługę podwójnych cudzysłowów, dane zostaną wstawione z podwójnymi cudzysłowami do wierszy. po wstawieniu danych do tabeli można zamienić te podwójne cudzysłowy na „
”.
Rozwiązanie
Aby obsłużyć wiersze, które nie zostały załadowane do tabeli z powodu niepoprawnych danych lub formatu, można je obsłużyć za pomocą właściwości ERRORFILE , podaj nazwę pliku błędu, zapisuje wiersze z błędem do pliku błędu. kod powinien wyglądać.
źródło
Najpierw musisz utworzyć tabelę w bazie danych, w której będziesz importować plik CSV. Po utworzeniu tabeli wykonaj poniższe czynności.
• Zaloguj się do bazy danych za pomocą SQL Server Management Studio
• Kliknij bazę danych prawym przyciskiem myszy i wybierz
Tasks -> Import Data...
• Kliknij
Next >
przycisk• W polu Źródło danych wybierz
Flat File Source
. Następnie użyj przycisku Przeglądaj, aby wybrać plik CSV. Poświęć trochę czasu na skonfigurowanie sposobu importowania danych, zanim kliknieszNext >
przycisk.• W polu Miejsce docelowe wybierz poprawnego dostawcę bazy danych (np. Dla SQL Server 2012 można użyć SQL Server Native Client 11.0). Wpisz nazwę serwera. Sprawdź
Use SQL Server Authentication
przycisk opcji. Wprowadź nazwę użytkownika, hasło i bazę danych przed kliknięciemNext >
przycisku.• W oknie Wybierz tabele źródłowe i widoki możesz edytować mapowania przed kliknięciem
Next >
przycisku.• Zaznacz
Run immediately
pole wyboru i kliknijNext >
przycisk.• Kliknij
Finish
przycisk, aby uruchomić pakiet.Powyższe znaleziono na tej stronie (użyłem go i przetestowałem):
źródło
Powinieneś użyć opcji FORMAT = „CSV”, FIELDQUOTE = „” ”:
źródło
Najlepszym, najszybszym i najłatwiejszym sposobem rozwiązania problemu z przecinkiem w danych jest użycie programu Excel do zapisania pliku rozdzielanego przecinkami po ustawieniu separatora listy systemu Windows na coś innego niż przecinek (np. Potok). Spowoduje to wygenerowanie pliku oddzielonego potokiem (lub cokolwiek innego), który można następnie zaimportować. Jest to opisane tutaj .
źródło
Najpierw musisz zaimportować plik CSV do tabeli danych
Następnie możesz wstawić wiersze zbiorcze za pomocą SQLBulkCopy
źródło
Oto jak bym to rozwiązał:
Wystarczy zapisać plik CSV jako arkusz XLS w programie Excel (Dzięki temu nie będziesz musiał się martwić ogranicznikami. Format arkusza kalkulacyjnego Excela zostanie odczytany jako tabela i zaimportowany bezpośrednio do tabeli SQL)
Zaimportuj plik za pomocą SSIS
Napisz niestandardowy skrypt w menedżerze importu, aby pominąć / zmodyfikować dane, których szukasz. (Lub uruchom skrypt główny, aby sprawdzić dane, które chcesz usunąć)
Powodzenia.
źródło
Ponieważ nie używają kreatora importu SQL, kroki byłyby następujące:
Kliknij bazę danych prawym przyciskiem myszy w opcjach zadań importowania danych,
Po otwarciu kreatora wybieramy typ danych, które mają być sugerowane. W tym przypadku byłoby to
Wybieramy plik CSV, możesz skonfigurować typ danych tabel w CSV, ale najlepiej jest przynieść go z CSV.
W zależności od naszego rodzaju uwierzytelnienia wybieramy go, gdy to nastąpi, pojawia się bardzo ważna opcja.
(zwykle nie zaczynając od 1), zamiast tego, jeśli mamy kolumnę z identyfikatorem w pliku CSV, wybieramy opcję wstawiania włączania identyfikatora, następnym krokiem jest zakończenie działania kreatora, możemy przejrzeć zmiany tutaj.
Z drugiej strony, w kolejnym oknie mogą pojawić się alerty lub ostrzeżenia, idealnym rozwiązaniem jest zignorowanie tego, tylko jeśli pozostawiają one błąd, należy zwrócić uwagę.
Ten link zawiera obrazy .
źródło
Zaimportuj plik do Excela, najpierw otwierając program Excel, a następnie przechodząc do DANYCH, importując z pliku TXT, wybierz rozszerzenie csv, które zachowa 0 prefiksowanych wartości, i zapisz tę kolumnę jako TEKST, ponieważ w przeciwnym razie program Excel usunie początkowe 0 (NIE podwójnie kliknąć aby otworzyć w programie Excel, jeśli masz dane liczbowe w polu rozpoczynającym się od 0 [zero]). Następnie po prostu zapisz jako plik tekstowy rozdzielany tabulatorami. Podczas importowania do programu Excel masz opcję zapisania jako OGÓLNE, TEKSTOWE itp. Wybierz TEKST, aby cytaty w środku ciągu w polu takim jak TwojaFirma, LLC były również zachowane ...
Chciałbym móc korzystać z funkcji FORMAT i Fieldquote, ale wydaje się, że nie jest to obsługiwane w mojej wersji SSMS
źródło
Wiem, że są akceptowane odpowiedzi, ale mimo to chcę podzielić się moim scenariuszem, który może pomóc komuś rozwiązać problem NARZĘDZIA
SCENARIUSZ ładowałem zestaw danych w formacie CSV, który później był wyświetlany w widoku. Próbowałem użyć ładowania zbiorczego, ale nie mogę załadować tak, jak
BULK LOAD
korzystałemi komórka Excel również używała,
,
jednak nie mogłem również używaćFlat file source
bezpośrednio, ponieważ używałemCode-First Approach
i robiłem to tylko w modelu SSMS DB, a nie w modelu, z którego musiałem później korzystać z właściwości.ROZWIĄZANIE
Add-Migration
w konsoli pakietu NuGetźródło
Wiem, że nie jest to dokładne rozwiązanie powyższego pytania, ale dla mnie był to koszmar, gdy próbowałem skopiować dane z jednej bazy danych znajdującej się na oddzielnym serwerze do mojego lokalnego.
Próbowałem to zrobić, najpierw eksportując dane z serwera,
CSV/txt
a następnie importując je do mojej tabeli lokalnej.Oba rozwiązania: zapisanie zapytania w celu zaimportowania
CSV
lub użycie kreatora importu danych SSMS zawsze powodowało błędy (błędy były bardzo ogólne, mówiąc, że występuje problem z analizą). I chociaż nie robiłem nic specjalnego, po prostu eksportowałem do,CSV
a następnie próbowałem zaimportowaćCSV
do lokalnegoDB
, błędy zawsze były.Próbowałem spojrzeć na sekcję mapowania i podgląd danych, ale zawsze był duży bałagan. Wiem, że główny problem pochodził z jednej z
table
kolumn, która zawierałaJSON
iSQL
parser źle to traktował.W końcu wymyśliłem inne rozwiązanie i chcę się nim podzielić na wypadek, gdyby ktoś miał podobny problem.
Zrobiłem to, że użyłem Kreatora eksportu na serwerze zewnętrznym.
Oto kroki, aby powtórzyć ten sam proces:
1) Kliknij bazę danych prawym przyciskiem myszy i wybierz
Tasks -> Export Data...
2) Gdy Kreator się otworzy, wybierz Dalej, a zamiast „Źródło danych:” wybierz „SQL Server Native Client”.
3) Po wciśnięciu Dalej musisz wybrać Miejsce docelowe .
W tym celu wybierz ponownie „SQL Server Native Client”.
Tym razem możesz podać swój lokalny (lub inny zewnętrzny
DB
)DB
.4) Po naciśnięciu przycisku Dalej masz dwie opcje, aby skopiować całą tabelę z jednej
DB
do drugiej lub zapisać zapytanie, aby określić dokładne dane do skopiowania. W moim przypadku nie potrzebowałem całej tabeli (była zbyt duża), ale tylko jej część, więc wybrałem „Napisz zapytanie, aby określić dane do przesłania”.5) I na koniec musisz określić tabelę docelową, w której zostaną wybrane dane.
A teraz przejdź od razu do końca kreatora, naciskając przyciski Dalej / Zakończ .
źródło
Może to być SSMS: pomoc w importowaniu (kopiowaniu / wklejaniu) danych z programu Excel (jeśli nie chcesz ich używać
BULK INSERT
lub nie masz do nich uprawnień).źródło