Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bulk Insert: Incorrect Syntax Near (https://www.delphipraxis.net/182948-bulk-insert-incorrect-syntax-near.html)

CM123 28. Nov 2014 16:25

Datenbank: MS SQL • Version: 2012 • Zugriff über: ADO

Bulk Insert: Incorrect Syntax Near
 
Hallo,

ich habe ein kleines Problem mit dem Bulk Insert.


Ich befülle eine Datenbank mit verschiedenen Tabellenarten (in diesem Fall die 400er), die von unterschiedlichen Herstellen kommen können.
Bei den 400er Tabellen bin ich auf Bulk Insert umgestiegen, da sie hier bis zu 1,4GB groß sein können.

Die anderen Tabellen habe mit als Transaction mit Insert hochgeladen und Sonderzeichen direkt im Programm abgefangen und herausgefiltert.
Jetzt weiß ich aber nicht, wie ich mit Bulk Insert die Sonderzeichen abfangen kann.

Fehlermeldung:
Incorrect syntax near '-'

Die Daten an der Stelle:
1A3 002 850-001 0002400 00088 0000003770000100023326 00

Klar woher es kommt, aber wie geht es wieder weg ^^


Der Aufruf erfolgt wie folgt:

Delphi-Quellcode:
ADOQuery1.SQL.Add('BULK INSERT [dbo].[400.'+Hersteller+'] FROM '''+Verzeichnis+'400.'+Hersteller+''' WITH (FORMATFILE='''+Verzeichnis+'400.xml'', BATCHSIZE='+Zeilenzahl+')');


Als Formatfile habe ich folgendes hinterlegt:
Code:
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RECORD>
    <FIELD ID="1" xsi:type="CharFixed" LENGTH="22"/>
    <FIELD ID="2" xsi:type="CharFixed" LENGTH="4"/>
    <FIELD ID="3" xsi:type="CharFixed" LENGTH="3"/>
    <FIELD ID="4" xsi:type="CharFixed" LENGTH="5"/>
    <FIELD ID="5" xsi:type="CharFixed" LENGTH="5"/>
    <FIELD ID="6" xsi:type="CharFixed" LENGTH="3"/>
    <FIELD ID="7" xsi:type="CharFixed" LENGTH="9"/>
    <FIELD ID="8" xsi:type="CharFixed" LENGTH="5"/>
    <FIELD ID="9" xsi:type="CharFixed" LENGTH="4"/>
    <FIELD ID="10" xsi:type="CharFixed" LENGTH="20"/>
    <FIELD ID="11" xsi:type="CharFixed" LENGTH="1"/>
    <FIELD ID="12" xsi:type="CharTerm" TERMINATOR="\r\n"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="ArtNr" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="2" NAME="DLNr" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="3" NAME="SA" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="4" NAME="Reserviert" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="5" NAME="GenArtNr" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="6" NAME="LKZ" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="7" NAME="LfdNr" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="8" NAME="SortNr" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="9" NAME="KritNr" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="10" NAME="KritWert" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="11" NAME="Exclude" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="12" NAME="AnzSofort" xsi:type="SQLNVARCHAR"/>
  </ROW>
</BCPFORMAT>
Für Hilfe wäre ich sehr dankbar :)

Dejan Vu 28. Nov 2014 17:41

AW: Bulk Insert: Incorrect Syntax Near
 
Was sind denn '400ter-Tabellen'?
Wieso ist klar, dass das '-' ein Problem darstellt?

Deine Bulk-Insert Tabellen musst Du vorher so aufbereiten, das sie direkt eingelesen werden können.

Uwe Raabe 28. Nov 2014 17:49

AW: Bulk Insert: Incorrect Syntax Near
 
Außerdem beschreibt die XML-Datei einen Record mit 81+ Zeichen, dein Beispiel liefert aber nur 55.

CM123 28. Nov 2014 18:24

AW: Bulk Insert: Incorrect Syntax Near
 
Erstmal zur Zeichenmenge, die ist korrekt, fehlende Zeichen (Leerzeichen) im Beispiel wurden anscheinend beim Kopieren hierher ausgelassen.
Eine Vielzahl an Tabellen werden damit geladen und sie sind bei dieser Art alle gleich aufgebaut.


Die 400er ist einfach nur eine Tabellenart, in dem Fall die Artikel-Suchwegverknüpfung.

Zitat:

Wieso ist klar, dass das '-' ein Problem darstellt?
Nun, das ist mir mitlerweile nicht mehr so klar...

Ich hatte nur festgestellt, das die Tabellen wo er einen Fehler gegeben hatte alle '-' enthielten und die Meldung: Incorrect syntax near '-' ließ mich dadrauf schließen.

Jetzt hat sich aber folgendes ergeben, das Programm gab mir die Fehlermeldung: "Stream konnte nicht geladen werden", ich habe die entsprechende Datei rausgenommen (ohne das Programm komplett zu beenden) und wollte die weiteren laden lassen.

Nun folgte bei jeder weiteren Datei (nachdem ich sie rausnahm^^):
Fehlermeldung:
Incorrect syntax near '-'

Bis ich irgendwann das Programm beendete, kurz darauf folgte die Meldung:
Zu wenig Arbeitsspeicher.


Okay, ich habe jetzt 2 Mal die gleiche Fehlermeldung, einmal weiß ich das sie durch den Arbeitsspeicher (und das nichtbeenden des Programms) verursacht wird, aber im ersten Fall habe ich immer noch keinen Plan wo sie denn jetzt wirklich her kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz