# Problem bei MSSQL->MySQL mit NULL-Werten (über CSV-Datei)



## Micro-User (30. Juli 2009)

Hallo, da dies mein erster Beitrag in diesem Forum ist erst einmal ein freundliches "Hallo an Alle" ... 


Komme ich zu meinem Problem. Ich möchte Daten aus einer Microsoft SQL-Datenbank in eine MySQL-Datenbank synchronisieren. Der Datenaustausch soll später automatisch (täglich) durchgeführt werden. Dadurch man ja mit MSSQL nicht direkt Daten in die MySQL schreiben kann, wollte ich den Zwischenschritt über eine CSV-Datei gehen. Das Programm sollte dabei in einer Batch-Datei geschrieben werden und später über geplante Tasks ausgeführt werden.

Aufbau bisher:

```
Export aus MSSQL:
BCP "<meinSQLStatement>" queryout <meinPfad>\export.csv -S <Server> -T -k -c -C -t "\t"

Import in MySQL:
START <meinMySQL>\mysql.exe -h localhost --user=<meinUser> --password=<meinPW> -e "LOAD DATA INFILE '<meinPfad>\export.csv' REPLACE INTO TABLE <meineDBTabelle> CHARACTER SET Latin1 FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n';"
```

Soweit funktioniert dies auch sehr gut. 

Ich habe jedoch nun das Problem, wenn NULL-Werte in die MySQL-Datenbank importiert werden sollen. Er versucht nicht vorhandene Daten '' in einen Datentyp umzuwandeln und bringt einen Fehler (ist ja irgendwo auch logisch). Ich weiß auch, dass ein \N für die MySQL-Datenbank NULL ist. Jedoch wie bekomme ich nun in die aus der MSSQL-DB exporierte CSV-Datei an diesen Stellen das \N rein!? Oder gibt es noch eine andere Möglichkeit? Ich bin für alle Vorschläge offen.


Der Inhalt der CSV schaut dann beispielsweise so aus:
Artikel1     Bezeichnung1
Artikel2     Bezeichnung2
Artikel3     
Artikel4     Bezeichnung4
....

Meine Idee war nun, den CSV-Export mit Field Delimitern mit dem Zeichen " zu versehen und anschließend irgendwie alle leeren Werte "" durch "\N" zu ersetzen. Nur wie funktioniert dies oder ist das garnicht möglich?
Dies müsste eigentlich den gewünschten Erfolg bringen.

Aufbau dann:
"Artikel1"   "Bezeichnung1"
"Artikel2"   "Bezeichnung2"
"Artikel3"   ""
"Artikel4"   "Bezeichnung4"
...

Ich hoffe ich hab mein Problem gut erklärt und Ihr könnt mir irgendwie dabei helfen. Wie gesagt, falls jemand einen anderen Ansatz hat, dann her damit 

Schon im Voraus vielen Dank für eure Hilfe,
Gruß Micro-User


----------



## zeja (31. Juli 2009)

Was passiert denn bei -k für BCP?

http://msdn.microsoft.com/de-de/library/ms162802.aspx


----------



## Micro-User (31. Juli 2009)

Hallo, Du hast den Richtigen Link ja schon mit angegeben. 
Das ist nur für einen IMPORT von Bedeutung, kann hier also vernachlässigt werden. Ich hatte das mal mit reingeschrieben, um zu schauen was dies bewirkt und habe es wohl vergessen wieder zu entfernen. 
Bewirken tut das bei einem Import ja, dass bei Spalten, wo Defaultwerte angegeben sind, dennoch eine NULL eingefügt wird.

Gruß Micro-User


----------

