it-swarm.com.de

Konvertierungsfehler für Massenladedaten (Typkonflikt oder ungültiges Zeichen für die angegebene Codepage) für Zeile 1, Spalte 4 (Jahr)

Ich erhalte den Konvertierungsfehler, wenn ich versuche, eine Textdatei in meine Datenbank zu importieren. Unten ist die Fehlermeldung, die ich erhalten habe:

Konvertierungsfehler für Massenladedaten (Typkonflikt oder ungültiges Zeichen für die angegebene Codepage) für Zeile 1, Spalte 4 (Year).

Hier ist mein Abfragecode:

CREATE TABLE Students
(
    StudentNo    Integer NOT NULL Primary Key,
    FirstName    VARCHAR(40) NOT NULL,
    LastName     VARCHAR(40) NOT NULL,
    Year         Integer,
    GPA          Float NULL
);

Hier sind die Beispieldaten aus der Textdatei:

100,Christoph,Van Gerwen,2011
101,Anar,Cooke,2011
102,Douglis,Rudinow,2008

Ich glaube, ich weiß, was das Problem ist.

use xta9354
bulk insert xta9354.dbo.Students
from 'd:\userdata\xta9_Students.txt' 
with (fieldterminator = ',',rowterminator = '\n') 

Bei den Beispieldaten gibt es nach dem Year-Attribut kein ',', obwohl nach dem Year noch ein weiteres Attribut vorhanden ist, das NULL ist

Kann mir bitte jemand sagen, wie ich das beheben kann?

15
zoe

Verwenden Sie eine Datei im Format , da Ihre Datendatei nur 4 Spalten enthält. Andernfalls versuchen Sie OPENROWSET oder verwenden Sie eine Staging-Tabelle.

myTestFormatFiles.Fmt kann folgendermaßen aussehen:

9.0 
 4 
 1 SQLINT 0 3 "," 1 StudentNo "" 
 2 SQLCHAR 0 100 "," 2 Vorname SQL_Latin1_General_CP1_CI_AS 
 3 SQLCHAR 0 100 "," 3 Nachname SQL_Latin1_General_CP1_CI_AS 
 SQLINT 0 4 "\ r\n" 4 Jahre "

http://i.msdn.Microsoft.com/dynimg/IC45684.gif

Dieses Tutorial beim Überspringen einer Spalte mit BULK INSERT kann auch hilfreich sein.

Ihre Aussage würde dann so aussehen:

USE xta9354
GO
BULK INSERT xta9354.dbo.Students
    FROM 'd:\userdata\xta9_Students.txt' 
    WITH (FORMATFILE = 'C:\myTestFormatFiles.Fmt')
19
Kermit

In meinem Fall befasste ich mich mit einer Datei, die von hadoop in einer Linux-Box erzeugt wurde. Als ich versuchte, in SQL zu importieren, hatte ich dieses Problem. Die Lösung bestand darin, den Hex-Wert für 'Zeilenvorschub' 0x0a zu verwenden. Es funktionierte auch für Schüttgut

bulk insert table from 'file' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a')
8
Roger

Wir verwenden auch den Bulk-Einsatz. Die hochgeladene Datei wird von einer externen Partei gesendet. Nach einiger Zeit der Fehlerbehebung bemerkte ich, dass ihre Datei Spalten mit Kommas enthielt. Nur noch eine Sache, auf die Sie achten sollten ...

2
PPJN

Die oben genannten Optionen funktionieren auch für Google große Abfragedateien. Ich habe Tabellendaten in einen Cloud-Speicher exportiert und von dort heruntergeladen. Beim Laden desselben in den SQL Server trat dieses Problem auf und konnte die Datei erfolgreich laden, nachdem das Zeilenbegrenzer als angegeben wurde 

ROWTERMINATOR = '0x0a' 

Achten Sie auch auf den Kopfsatz und geben Sie an 

FIRSTROW = 2

Mein letzter Block für den Datendateiexport von Google bigquery sieht so aus.

BULK INSERT TABLENAME
        FROM 'C:\ETL\Data\BigQuery\In\FILENAME.csv'
        WITH
        (
         FIRSTROW = 2,
         FIELDTERMINATOR = ',',  --CSV field delimiter
         ROWTERMINATOR = '0x0a',--Files are generated with this row terminator in Google Bigquery
         TABLOCK
        )
0
Ratnesh Sharma

MSSQLSERVER-Vollzugriff auf die Server-Rollen ordner, diskadmin und bulkadmin hinzugefügt.

Wenn Sie sich in meiner C # -Anwendung auf den Befehl zum Masseneinfügen vorbereiten, 

string strsql = "BULK INSERT PWCR_Contractor_vw_TEST FROM '" + strFileName + "' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\ n')";

Und ich erhalte diesen Fehler - Fehler beim Konvertieren von Bulk-Ladedaten (Typkonflikt oder ungültiges Zeichen für die angegebene Codepage) für Zeile 1, Spalte 8 (STATUS).

Ich schaute auf meine Protokolldatei und stellte fest, dass das Terminator '' anstelle von '\ n' ..__ wurde. Der OLE DB-Provider "BULK" für Verbindungsserver "(null)" hat einen Fehler gemeldet. Der Anbieter hat keine Informationen zu dem Fehler angegeben Es kann keine Zeile von OLE DB-Anbieter "BULK" für Verbindungsserver "(null)" abgerufen werden. Abfrage: BULK INSERT PWCR_Contractor_vw_TEST FROM 'G:\NEWSTAGEWWW\CalAtlasToPWCR\Results\parsedRegistration.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '' )

Also fügte ich dem rowterminator einen zusätzlichen Escape-String hinzu - string strsql = "BULK INSERT PWCR_Contractor_vw_TEST FROM '" + strFileName + "' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\\ n' );

Und jetzt fügt er sich erfolgreich ein ..__ Bulk Insert SQL - ---> BULK INSERT PWCR_Contractor_vw_TEST FROM 'G:\NEWSTAGEWWW\CalAtlasToPWCR\Results\parsedRegistration.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\ n' Masseneinfügung in PWCR_Contractor_vw_TEST erfolgreich ... ---> clsDatase.PerformBulkInsert

0
Perry