Daten von MySQL Tabelle in MSSQL übertragen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Drachie.

    Daten von MySQL Tabelle in MSSQL übertragen

    Moin zusammen,

    Stehe gerade vor einem Problem welches ich nicht so recht selber lösen kann:

    ich möchte aus einer MySQL Tabelle die zu einem OTRS Ticketsystem gehört bestimmte werte per SELECT auslesen und im gleichen schritt diese dann in eine Tabelle eines CRM System importieren, wo die Offenen Tickets dann angezeigt werden.

    Wie ich an die Daten komme ist mir schon klar auch welche Felder ich benötige. mein Problem an der ganzen Sache ist, das ich auf dem schlauch stehe wie ich den SQL Querybefehl zusammenbasteln muss, damit dieses klappt. vielleicht könnt Ihr mit da ein paar tips geben?
    Naja, du musst halt die Felder von MySQL auf die Felder von MSSQL Mappen. Dabei gibt es lustige Dinge, wie DateTime vs. DateTime2 in MSSQL, oder den unterschied zwischen varchar und nvarchar, sowie die gesamte Collation Geschichte in MySQL, die einem Kopfzerbrechen bereiten kann.

    Um dir aber konkret helfen zu können, musst du uns auch ein konkretes Problem vozeigen.
    Also, zeig uns doch bitte mal die beiden Tabellen, und was du so bisher versucht hast.
    aufbau der MySQL Table:


    aufbau der mssql table:



    versucht mit folgenden commandtext als executenonquery:

    SQL-Abfrage

    1. INSERT INTO crmsys.tickets values (tnummer,tbetreff,ttech,prio,tsatus) SELECT tn, title, user_id, ticket_priority_id, ticket_state_id FROM orts.ticket WHERE ticket_state_id = '1'


    die beiden Datenbänke liegen allerdings nicht auf den gleichen Host.

    Auzug aus dem Quellcode dazu:

    VB.NET-Quellcode

    1. scon2.ConnectionString = "Server='" & mysqlsrv & "';user='" & mysqluser & "';password='" & mysqlpass & "';database='otrs'"
    2. scmd2.Connection = scon2
    3. scmd2.CommandText = "SELECT * from ticket WHERE ticket_state_id = '1'"
    4. scon2.Open()
    5. sdat2 = scmd2.ExecuteReader
    6. While sdat2.Read
    7. If CInt("SELECT * from ticket WHERE ticket_state_id = '1'") = Not Nothing Then
    8. scon1.ConnectionString = "Server='localhost';User ID='crm';Password='" & sqlpass & "';Database=crmsys'"
    9. scmd1.Connection = scon1
    10. scmd1.CommandText = "INSERT INTO crmsys.tickets values (tnummer,tbetreff,ttech,prio,tsatus) SELECT tn, title, user_id, ticket_priority_id, ticket_state_id FROM orts.ticket WHERE ticket_state_id = '1'"
    11. scon1.Open()
    12. scmd1.ExecuteNonQuery()
    13. scon1.Close()
    14. End If
    15. End While
    16. scon2.Close()
    Bilder
    • mysql tabelle.png

      44,24 kB, 1.540×272, 65 mal angesehen
    • mssql table.png

      1,88 kB, 478×180, 66 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drachie“ ()

    Okay. Hier gibts ein paar Dinge zu tun ;)

    1. Öffne beide Connections gleichzeitig. Für jede Row der einen Tabelle die Connection zur anderen Datenbank zu öffnen und zu schließen kostet massig Zeit.
    2. Dein CommandText versucht auf MSSQL die Tabelle tickets der Datenbank orts abzurufen, die, wenn ich richtig verstehe, nur auf dem MySQL liegt. Wie soll das Funktionieren? Nur weil du einen Select auf dem MySQL durchgeführt hast, und durch den Reader iterierst (ohne dabei jemals die Werte abzurufen) weis MSSQL noch lange nichts von dieser Tabelle.
    3. Deine Insert-Syntax ist falsch, Values hat in einem INSERT INTO ... SELECT nichts zu suchen. Abgesehen davon, dass du hier lediglich INSERT INTO ohne SELECT benötigst.
    4. Du musst die Werte aus dem Reader lesen, und dann in deinen CommandText packen. Das kannst du entweder mit Stringefrickel erreichen (Quick&Dirty) oder aber dich darum kümmern, dass du mit Parametern arbeitest.
    5. Transaktionen wären in so einem Fall ganz Nett um notfalls einen Rollback ausführen zu können, der die DB nicht in einem halbgaren Zustand zurück lässt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    ich hbe jetzt mehrfach die Abfragen umgestellt und bin zum schluss jetzt dazu übergegangen die geforderten Daten direkt per Schnittstelle abzurufen, da diese nicht im CRM bearbeitet werden sollen sondern nur der Übersicht diennen...