2013-03-27 12 views
21

Mam kilka plików CSV, które chcę zaimportować do bazy danych SQL Server . Wiem, czy jest to możliwe przy wstawianiu BULK, ale chcę rozwiązania, tak aby tabela importu została automatycznie utworzona przed na podstawie pierwszego wiersza plików CSV, są to nazwy kolumn.Importowanie pliku CSV do programu SQL Server (w tym automatyczne tworzenie tabel)

+1

Czy potrzebny jest program, aby to zrobić? Możesz użyć narzędzia do importu programu SQL Server Management Studio. – 03Usr

Odpowiedz

26

SQL Server Management Studio udostępnia narzędzie do importu/eksportu, które ma opcję automatycznego tworzenia tabel.

można uzyskać do niego dostęp poprzez kliknięcie prawym przyciskiem myszy na bazie danych w Eksploratorze obiektów i wybierając Tasks-> Importuj dane ...

Stamtąd kreatora powinna być oczywista i łatwa w nawigacji. Wybierasz swój plik CSV jako źródło, pożądany cel, konfigurujesz kolumny i uruchamiasz pakiet.

Jeśli potrzebujesz szczegółowych wskazówek, istnieje wiele przewodników online, tutaj jest ładny jeden: http://www.mssqltips.com/sqlservertutorial/203/simple-way-to-import-data-into-sql-server/

+4

Ten link nie obejmuje plików CSV, co było pytaniem. – rncrtr

+6

@rncrtr Mogę zapewnić, że proces jest prawie taki sam. Istnieje niewielka różnica w niektórych opcjach po wybraniu pliku płaskiego jako źródła zamiast programu Excel z opisanego, ale kreator jest wystarczająco dobry, więc nie powinno być problemu z jego zrozumieniem. –

+0

Na serwerze, z którego korzystam, nie ma opcji pliku płaskiego, więc jest to dla mnie ślepy zaułek. Dowiedziałem się, że istnieje oddzielne narzędzie, które go nie zawiera (narzędzie do importu i eksportu danych), ale dopiero po pewnym czasie okazało się, że był to bilet do użytku. Dzięki. – rncrtr

8

Można utworzyć zmienną tabeli zmiennych i wstawić do niej dane, a następnie wstawić dane do rzeczywistej tabeli, wybierając ją z tabeli tymczasowej.

declare @TableVar table 
(
    firstCol varchar(50) NOT NULL, 
    secondCol varchar(50) NOT NULL 
) 

BULK INSERT @TableVar FROM 'PathToCSVFile' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n') 
GO 

INSERT INTO dbo.ExistingTable 
(
    firstCol, 
    secondCol 
) 
SELECT firstCol, 
     secondCol 
FROM @TableVar 

GO 
+2

Dlaczego po prostu nie wstawiłeś go bezpośrednio do istniejącej tabeli? – Travis

+0

Znalazłem, że musisz użyć tabeli tymczasowej zamiast zmiennej tabeli. Zobacz ten [odpowiedź] (http://stackoverflow.com/a/14113855/469637) – Jeff

+2

Nie można wstawić zbiorczo do "zmiennej tabeli". musi być tempem lub prawdziwym stołem. –

Powiązane problemy