BCP/ Bulk Insert schlägt Fehl (tab-getrennte Datei)
Habe ich versucht zu importieren-Daten (Tabulator getrennt) in SQL server. Die source-Daten exportiert werden, die von IBM Cognos. Daten können heruntergeladen werden von: sample-Daten
Habe ich versucht BCP /Bulk Insert -, aber es hat nicht geholfen. Die ursprüngliche Datei enthält eine header-Zeile (die übersprungen werden muss).
==================================
Schema:
CREATE TABLE [dbo].[DIM_Assessment](
[QueryType] [nvarchar](4000) NULL,
[QueryDate] [nvarchar](4000) NULL,
[APUID] [nvarchar](4000) NULL,
[AssessmentID] [nvarchar](4000) NULL,
[ICDCode] [nvarchar](4000) NULL,
[ICDName] [nvarchar](4000) NULL,
[LoadDate] [nvarchar](4000) NULL
) ON [PRIMARY]
GO
=============================
Format-Datei mit dem folgenden Befehl generiert
bcp [dbname].dbo.dim_assessment format nul -c -f C:\config\dim_assessment.Fmt -S <IP> -U sa -P Pwd
Inhalt der Datei im format:
11.0
7
1 SQLCHAR 0 8000 "\t" 1 QueryType SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 8000 "\t" 2 QueryDate SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 8000 "\t" 3 APUID SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 8000 "\t" 4 AssessmentID SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 8000 "\t" 5 ICDCode SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 8000 "\t" 6 ICDName SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 8000 "\r\n" 7 LoadDate SQL_Latin1_General_CP1_CI_AS
=============================
Ich habe versucht, den Import von Daten mithilfe von BCP /Bulk Insert -, jedoch nicht von Ihnen arbeitete.
bcp [dbname].dbo.dim_assessment IN C:\dim_assessment.dat -f C:\config\dim_assessment.Fmt -S <IP> -U sa -P Pwd
BULK INSERT dim_assessment FROM '\\dbserver\DIM_Assessment.dat'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\r\n'
);
GO
Vielen Dank im Voraus für Eure Hilfe@
- Was bedeutet "nichts hat funktioniert" bedeuten? Hast du eine Fehlermeldung bekommen? Wenn dem so ist, was ist es?
- Ja, zu dieser Zeit, ich kann nicht importieren von Daten mit SSIS. Wir schauen auf eine automatisierte Methode zum importieren von Daten im Netzwerk gespeichert in der SQL-server.
- Ich bin mir nicht sicher, wie Sie Sie, die Antwort beantwortet alle meine Fragen.
- Keine Fehler auftauchen. Außer es sagt 0 Zeilen kopiert.
- Wenn Sie versuchen, BULK INSERT, das ist, was passiert?
- Meine schlecht, ich sah nicht, Ihren Kommentar vor dem posten meine SSIS Sache. sorry.
- Dies ist, was ich sehe, für die bulk insert
- DataFileType wird davon ausgegangen, dass widechar, da die Daten-Datei ist eine Unicode-Signatur. Msg 4866, Ebene 16, Status 1, Zeile 1 Das Massenladen ist fehlgeschlagen. Die Spalte ist zu lange in der Daten-Datei für die Zeile 1, Spalte 7. Stellen Sie sicher, dass das Feldabschlusszeichen und das Zeilenabschlusszeichen richtig angegeben wurden. Msg 7399, Ebene 16, Status 1, Zeile 1 Der OLE DB-provider "BULK" für den Verbindungsserver "(null)" meldete einen Fehler. Der Anbieter hat keine Informationen über den Fehler. Msg 7330, Ebene 16, Status 2, Zeile 1 Kann keine Zeile aus abrufen OLE DB-provider "BULK" für den Verbindungsserver "(null)".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre input-Datei ist in einem schrecklichen format.
Ihre format-Datei und Ihre
BULK INSERT
Befehl sowohl für den Staat, dass das Ende einer Zeile einen Wagenrücklauf und Zeilenvorschub-Kombination, und dass es sieben Spalten von Daten. Allerdings, wenn Sie öffnen Sie Ihre CSV-Datei im Editor werden Sie schnell sehen, dass die carriage returns und line feeds werden nicht beobachtet ordnungsgemäß in Windows (das heißt, Sie muss etwas anderes sein als genau\r\n
). Sie können auch sehen, dass es nicht tatsächlich sieben Spalten von Daten, sondern fünf:Schaut auf Sie optisch kann man sagen, es ist nicht richtig, und Sie brauchen, um eine bessere Quell-Datei, bevor warf es über die Mauer in SQL Server und erwartet, dass es zu behandeln es wie geschmiert:
Nur Gespeichert Ihre Datei als .CSV-und bulk eingefügt mit der folgenden Anweisung.
Meldete
Geladenen Daten
Nur bemerken, dass einige der Daten von der ICD-Namen überflogen hat in LoadDate Spalte, verwenden Sie Einfach die
|
pipe-Zeichen zu deliminate und verwenden die gleichen bulk insert-Anweisung mitFIELDTERMINATOR = '|'
und glückliche Tage .Starting copy... SQLState = S1000, NativeError = 0 Error = [Microsoft][SQL Server Native Client 11.0]Unexpected EOF encountered in BCP data-file 21 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 78 Average : (269.23 rows per sec.)
Öffnen Sie die Datei über Excel zeigt das folgende:
Ich denke, dass in diesen Bedingungen, der bulk insert funktioniert möglicherweise nicht ordnungsgemäß. Als Excel scheint auf verwalten Ihre Datei in einem ganz saubere Art und Weise, sollten Sie darüber nachdenken, ein extra-Schritt, von CSV zu Excel und dann zu Ihrer Datenbank.
PPIC,11/20/2013 10:23,11431,10963,,Tremors ,
PPIC,11/20/2013 10:23,11431,11592,,"Glioblastoma, Barin ",
die erste Zeile ist korrekt eingesetzt. die zweite Zeile fügt jedoch die Letzte Spalte gespeichert, die in mehrere Spalten (ich glaube, es ist, weil das zusätzliche Komma) Wie kann ich das beheben?Starting copy... SQLState = S1000, NativeError = 0 Error = [Microsoft][SQL Server Native Client 11.0]Unexpected EOF encountered in BCP data-file 21 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 78 Average : (269.23 rows per sec.)
keine Hilfe?Ok, so war dies eine vermeintlich einfache Aufgabe zu drücken getrennte Daten aus flat-Datei zu SQL server. Ich dachte, BCP war der Weg zu gehen (ich habe es benutzt und war früher erfolgreich).
Einen schnellen überblick von dem, was vorgeschlagen wurde:
ein. Update der source-Datei
b. speichern von source-Daten in nativem excel-format
c. speichern von source-Daten als pipe-separierte Daten
Ich habe versucht, alle Optionen, aber, es war Sie mehrere Schritte, um meinen Prozess, aber war machbar.
Stolperte ich über invoke-sqlcmd - & import-csv aus der powershell commandlets. Stellt sich heraus, ich kann die Daten importieren, mithilfe der powershell direkt. es ist ein bisschen langsam, aber ich kann damit Leben, dass für jetzt.
Vielen Dank für Ihre Hilfe!