15

Szukam szybkiego i brudnego sposobu importowania plików CSV do SQL Server bez konieczności wcześniejszego tworzenia tabeli i zdefiniowania jej kolumn.Jak utworzyć i wypełnić tabelę w jednym kroku jako część operacji importowania pliku CSV?

Każdy importowany plik CSV zostanie zaimportowany do własnej tabeli.

Nie martwimy się o inferencje typu danych. CSV różnią się strukturą i układem, a wszystkie z nich mają wiele kolumn, a my zajmujemy się tylko kilkoma z nich: adresami ulicznymi i kodami zip. Chcemy szybko pobrać dane CSV do bazy danych SQL i wyodrębnić odpowiednie kolumny.

Chciałbym dostarczyć FieldTerminator i RowTerminator, wskazać go w pliku CSV, a narzędzie wykona resztę. Czy istnieje sposób, aby utworzyć tabelę i wypełnić ją, wszystko w jednym kroku, używając BULK INSERT i/lub OpenRowset (BULK ...)?

+0

Jaka wersja SQL Server? –

+0

Sql Server 2000 – Tim

Odpowiedz

11

Referencing SQLServerPedia, myślę, że to będzie działać:

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
RECONFIGURE; 
GO 

select TerritoryID 
     ,TotalSales 
     ,TotalCost 
INTO CSVImportTable 
from openrowset('MSDASQL' 
       ,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}' 
       ,'select * from C:\csvtest.CSV') 
+0

Dziękuję. Musiałem użyć Microsoft Text Driver zamiast Microsoft Access Text Driver, ale import działał. Jednak otrzymałem komunikat o błędzie (mimo że import działał pomimo tego): Msg 15123, poziom 16, Stan 1, procedura sp_configure, linia 79 Opcja konfiguracji "Zapytania rozproszone ad hoc" nie istnieje lub może być zaawansowana opcja. – Tim

+0

Musisz przeprowadzić "RECONFIGURE" dla zaawansowanych opcji, zanim będziesz mógł skonfigurować opcję ad-hoc. Po pierwszej RECONFIGURACJI powinno być inne GO. Będę edytować ponownie. – TyT

5

irytujące, nie mam jeszcze punktów rep po prostu wypowiedzieć, więc dodam odpowiedź opartą na Tyt'S (który wygląda okropnie w uchwyt zaborczy, btw ...)

Kod roboczy wymagał podwójnego "\" zamiast pojedynczego, aby uniknąć błędu "nie znaleziono pliku". I nie musisz określać pól; zostaną one wywnioskowane z pierwszego wiersza pliku:

select * 
into CsvImportTable 
from openrowset(
      'MSDASQL', 
      'Driver={Microsoft Access Text Driver (*.txt, *.csv)}', 
      'select * from C:\\csvtestfile.csv') 

Nie miałem żadnych problemów ze sterownikiem Access.

AKTUALIZACJA: Jeśli masz problemy z błędnie wywiedzionymi typami, wstaw kilka wierszy u góry pliku z danymi typu, który chcesz w tabeli, aby uzyskać, powiedz tekst -> VARCHAR zamiast tekstu- > INT, a następnie usuń te wiersze po zaimportowaniu.

Jako ostatni oblodzenia, dodać PK w tabeli, dzięki czemu można manipulować dane - usunąć fikcyjne wierszy, itp:

alter table CsvImportTable add Id int identity(1, 1) 
+1

Co warto dodać, dodając szczegóły do ​​swojego profilu. Twoje punkty rep wzrosły. –

Powiązane problemy