BCP gibt keine Fehler, aber auch nicht alle Zeilen kopieren
Ich versuche, dump eine sehr große Menge von Daten aus .csv-Datei in eine SQL-Server-2012-Datenbank. Anstatt Tausende von Beilagen, ich bin untersucht bcp
.
EDIT: Dies ist ein automatisierter Prozess, und nicht nur ein one-off. Ich habe auch nicht BULK INSERT
Rechte an dieser Datenbank.
Wenn ich versuche, kopieren von Daten in die Datenbank bcp
nicht wieder irgendwelche Fehler, aber auch nicht wirklich alles kopieren - es gibt einfach zurück 0 rows copied
. Ich habe schnitzte diese nach unten zu einer minimalen Fall, das funktioniert nicht.
Ersten, erstellen Sie eine einfache Tabelle mit zwei Spalten:
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
Verwenden Sie dann bcp
Sie eine format-Datei von dieser. Beachten Sie, dass dieses Beispiel erstellt eine Datei im XML-format, aber es spielt keine Rolle, ob es XML oder natives für diese.
bcp MyDB.dbo.mincase format nul -T -n -f mincasexml.fmt -x -S .\SQLEXPRESS
Erstellen Sie nun die Daten.csv-Datei mit einer Zeile und zwei Einträge, den Tabulator-Trennzeichen. In meinem Fall, die Datei ist einfach:
somecharacters 12345
Wieder, das ist ein Reiter nicht zwei Leerzeichen, und es scheint nicht egal, ob es nachfolgende Zeilenumbrüche oder nicht.
Nun versuchen bcp
mit diesem format-Datei zum einfügen der Daten aus dieser Datei:
bcp MyDB.dbo.mincase in data.csv -f mincasexml.fmt -T -S .\SQLEXPRESS
Eher als das kopieren von Daten in der Datenbank, bekomme ich diese:
Starting copy...
0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 1
Weiß jemand, was hier Los ist?
Dank!
- haben Sie versucht, die option DATEN IMPORTIEREN?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den bcp Befehl braucht normalerweise einen Bezeichner angeben, das format der bcp-Datei.
In den test-Fall, die von Ihnen erstellte Datei ist Klartext, so dass Sie sollten geben Sie-c ' in Ihrem bcp in-Befehl.
Microsoft Empfiehlt mit der '-n' für Importe und Exporte zu vermeiden, Probleme mit Trennzeichen, die in der Spalte Werte (Siehe den Abschnitt " Character-Modus und Einheitlichen Modus Best Practices).
bcp MyDB.dbo.mincase in data.csv -c -T -S .\SQLEXPRESS
Ich lief in ein ähnliches Problem, außer, dass ich mich schon mit einem format-Datei, so das hinzufügen einer format-flags würde nicht helfen. Für alle anderen, die hier landet, möchte ich erklären, was verursacht dieses Problem für mich (und hoffentlich auch helfen, zu erklären, was das zugrunde liegende Problem die Ursache ist).
Das Problem ist, dass BCP nicht wirklich verarbeiten Zeilen text in einer Datei, sondern nur Prozesse, die einen Strom von Daten, nach den Anweisungen, die Sie ihm geben. Dies bedeutet, dass Zeilenumbrüche werden ignoriert, wenn das, was Sie (versehentlich) sagen BCP zu tun.
In meinem Fall, das war ein Tippfehler in der letzten Zeile in der Formatdatei:
Wenn Sie genau hinsehen, sehen Sie die Schrägstriche sind rückwärts in den terminator-Feld in der letzten Zeile. So, anstatt auf der Suche nach Windows-style line endings, BCP war eigentlich auf der Suche nach dem text-string "/r/n" in den Datenstrom.
Da der string nicht wirklich erscheinen meine Daten, BCP eigentlich nie das gefunden, was passend zu meiner letzten Feld. Also, macht es Sinn, dass es "0-Zeilen" zu kopieren.
Bin ich mir noch nicht sicher, warum dies nicht Ergebnis in so etwas wie eine "Unerwartetes EOF aufgetreten" Fehler oder etwas, aber ich hoffe, jemand anderes wird in der Lage sein zu erweitern.