Próbuję zrzucić bardzo duży zestaw danych z pliku .csv do bazy danych SQL Server 2012. Zamiast robić tysiące INSERTs, badam bcp
.BCP nie zwraca błędów, ale także nie kopiuje żadnych wierszy.
EDYTOWANIE: Jest to zautomatyzowany proces, a nie tylko jednorazowy. Też nie mam uprawnień do tej bazy danych: BULK INSERT
.
Kiedy próbuję skopiować dane do bazy danych, bcp
nie zwraca żadnych błędów, ale również nie kopiuje niczego - po prostu zwraca 0 rows copied
. Zmieniłem to na minimalną sprawę, która nie działa.
Najpierw należy utworzyć prostą tabelę z dwoma kolumnami:
CREATE TABLE [dbo].[mincase](
[key] [varchar](36) NOT NULL,
[number] [int] NOT NULL
PRIMARY KEY CLUSTERED
(
[key] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 40) ON [PRIMARY]
) ON [PRIMARY]
GO
Następnie użyj bcp
utworzyć plik formatu z tego. Zauważ, że ten przykład tworzy plik w formacie XML, ale nie ma znaczenia, czy jest to format XML czy natywny.
bcp MyDB.dbo.mincase format nul -T -n -f mincasexml.fmt -x -S .\SQLEXPRESS
Teraz utwórz plik data.csv z jednym wierszem i dwoma wpisami, rozdzielanymi tabulatorami. W moim przypadku, plik jest po prostu:
somecharacters 12345
Ponownie, to zakładka, nie dwa miejsca, i to nie wydaje się ważne, czy istnieją końcowe znaki nowej linii, czy nie.
Teraz spróbuj użyć bcp
z tego pliku w formacie wstawić dane z tego pliku:
bcp MyDB.dbo.mincase in data.csv -f mincasexml.fmt -T -S .\SQLEXPRESS
Zamiast kopiowania danych do bazy danych, mam to:
Starting copy...
0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 1
Czy ktoś wie co tu się dzieje?
Dzięki!
wypróbowałeś opcję IMPORT DATA? –