hawkmaster: Datentyp time in SQL Server nicht zulässig?

Hallo zusammen,

ich versuche gerade mit dem SQL Server Import / Export Assistent eine MySQL Datenbank zu SQL Server 2008 zu exportieren.
Bei einer MySQL Tabelle treten noch Fehler auf.

"Der Datentyp konnte der StartTime Spalte in SQL Server Native Client 10.0 nicht zugewiesen werden"

Die Spalte "StartTime" ist in MySQL als "Time" definiert.
Die Tabelle ist momentan noch leer. Gibt es vielleicht deshalb Probleme?

Hat jemand eine Erklärung für diese Meldung bzw. wie muss man den Typ ändern?

vielen Dank und viele Grüße
hawk

  1. Moinsen!

    ich versuche gerade mit dem SQL Server Import / Export Assistent eine MySQL Datenbank zu SQL Server 2008 zu exportieren.
    Bei einer MySQL Tabelle treten noch Fehler auf.

    Glaub ich unbesehen.

    "Der Datentyp konnte der StartTime Spalte in SQL Server Native Client 10.0 nicht zugewiesen werden"

    Wundert mich nicht.

    Die Spalte "StartTime" ist in MySQL als "Time" definiert.
    Die Tabelle ist momentan noch leer. Gibt es vielleicht deshalb Probleme?

    Das schimpft sich datetime. Wenn man auf ein neues System portiert, ist es empfehlenswert sich vorher damit auseinanderzusetzen. Nicht nur Datentypen heissen dort anders, auch der SQL Dialekt ist ein anderer.

    --
    Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.
    1. Hi!

      Das schimpft sich datetime.

      Time gibt es aber auch. Vielleicht hat der Konverter einen Fehler gemacht, bei mir wollte er die MySQL-Time-Spalte auf Bigint mappen.

      Lo!

      1. Hallo zusammen,

        Time gibt es aber auch. Vielleicht hat der Konverter einen Fehler gemacht, bei mir wollte er die MySQL-Time-Spalte auf Bigint mappen.

        eben, das hatte ich auch so gelesen. Daher wundert mich das auch. Ich vermute auch das es am Konverter liegt.

        vielen Dank und viele Grüße
        hawk

        1. Hi!

          Time gibt es aber auch. Vielleicht hat der Konverter einen Fehler gemacht, bei mir wollte er die MySQL-Time-Spalte auf Bigint mappen.
          eben, das hatte ich auch so gelesen. Daher wundert mich das auch. Ich vermute auch das es am Konverter liegt.

          Und, hast du mal das Mapping geprüft/korrigiert?

          Lo!

          1. Hallo dedlfix,

            Und, hast du mal das Mapping geprüft/korrigiert?

            ähmm, was meinst du genau?

            Ich wollte mal schauen, ob ein anderer ODBC Treiber Abhilfe schafft.

            vielen Dank und viele Grüße
            hawk

            1. Hi!

              Und, hast du mal das Mapping geprüft/korrigiert?
              ähmm, was meinst du genau?

              Wenn du dich durch den Assistenten klickst hast du am unteren Rand irgendwann mal einen Button der etwas mit Mapping in der Beschriftung hat (in der englischen Version). Das muss kurz nach der Statement-Eingabe auftauchen.

              Lo!

              1. Hi,
                sorry für die Verzögerung. Komme erst jetzt dazu.

                Also in meinem deutschen Import / Export Assistenten steht irgendwas von "Zuordnungen bearbeiten". Ich vermute du meinst dies.
                Wenn ich darauf klicke gibt es aber nur 3 Checkboxen. Unter anderem "Zieltabellen löschen nd neu erstellen". Aber es gibt nicht wo man Datentypen zuordnen kann.

                vielen Dank und viele Grüße
                hawk

                1. Hi!

                  Also in meinem deutschen Import / Export Assistenten steht irgendwas von "Zuordnungen bearbeiten". Ich vermute du meinst dies.

                  Vermutlich ja.

                  Wenn ich darauf klicke gibt es aber nur 3 Checkboxen. Unter anderem "Zieltabellen löschen nd neu erstellen". Aber es gibt nicht wo man Datentypen zuordnen kann.

                  Wenn die Zieltabelle noch nicht existiert kann ich bei mir in ein Feld der Spalte Type klicken und bekomme eine Auswahlliste. Von den drei Radio-Buttons im oberen Teil ist nur Create aktiv, Delete rows und Append rows nicht auswählbar. Existiert die Tabelle schon sind diese beiden wählbas, aber Create und auch die Typauswahl ist nicht mehr verfügbar.

                  Lo!

                  1. Hi,
                    danke nochmals für deine Hilfe.
                    Jetzt habe ich gefunden was du meintest. In der betreffenden Tabelle wo in MySQL die SPalte mit "time" definiert ist, erkannte der Assisten nur "24"?
                    ich habe es nun von Hand auf "time" gemappt und nun läuft es weiter.

                    Jedoch bekomme ich nun beim ausführen sofort einen Abbruch und er bleibt gleich bei der ersten Tabelle stehen mit einer Meldung wie
                    "You have an error in your SQL syntax..."

                    Hmm, keine Ahnung was ihm an der Tabelle nicht passt

                    vielen Dank und viele Grüße
                    hawk

                    1. Hi!

                      Jedoch bekomme ich nun beim ausführen sofort einen Abbruch und er bleibt gleich bei der ersten Tabelle stehen mit einer Meldung wie
                      "You have an error in your SQL syntax..."
                      Hmm, keine Ahnung was ihm an der Tabelle nicht passt

                      Das sagt er doch im weiteren Verlauf der Meldung.

                      Lo!

                      1. Hallo

                        hast du eigentlich schon mal mit dem neuen SSMA (SQL SErver Migration Assisten for MySQL) gearbeitet?

                        Mit dem versuche ich mich gerade. Die Konvertierrung der Tabellen und der Schema hat soweit geklappt. Beim Einfügen der Daten gibt es allerding sehr viele Fehlermeldungen mit "Identity Insert".

                        Hast du schon mal eine komplette MySQL DB nach SQL Server migriert?

                        vielen Dank und viele Grüße
                        hawk

                        1. Hi!

                          hast du eigentlich schon mal mit dem neuen SSMA (SQL SErver Migration Assisten for MySQL) gearbeitet?

                          Nein.

                          Hast du schon mal eine komplette MySQL DB nach SQL Server migriert?

                          Ja, ein Mal und auch noch zu Fuß. Schema neu erstellt und die Datensätze mittels Standard-SQL-INSERT-Dump (glaub ich) transferiert.

                          Lo!

                      2. Hallo

                        Das sagt er doch im weiteren Verlauf der Meldung.

                        schon, aber damit kann ich nichts anfangen:

                        Error 0xc02020ff: Source - my_testtable [1]: The component "Source - my_testtable" (1) was unable to retrieve column information for the SQL command. The following error occurred: ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.1.41]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"my_testtable"' at line 1
                         (SQL Server Import and Export Wizard)

                        Pipeline component has returned HRESULT error code 0xC02020FF from a method call. (Microsoft.SqlServer.DTSPipelineWrap)

                        vielen Dank und viele Grüße
                        hawk

                        1. Hi!

                          Error 0xc02020ff: Source - my_testtable [1]: The component "Source - my_testtable" (1) was unable to retrieve column information for the SQL command. The following error occurred: ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.1.41]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"my_testtable"' at line 1
                          (SQL Server Import and Export Wizard)

                          Pipeline component has returned HRESULT error code 0xC02020FF from a method call. (Microsoft.SqlServer.DTSPipelineWrap)

                          Dass der Tabellenname (ist doch einer, oder?) in ""-Anführungszeichen und nicht in `` eingefasst ist, deutet darauf hin, dass der Konverter ANSI-SQL-kompatible Statements erzeugt. Wenn diese Annahme stimmt, müsste mindestens die aktuelle Session auf ANSI_QUOTES-Mode umgestellt werden. Da der Konverter beim Auswählen der Quelle keine derartige Option bietet und auch kein initiales Statement angegeben werden kann, bleibt nur, bei der Eingabe des Source-Query-Statements ein SET sql_mode = ANSI_QUOTES; voranzustellen. Probier das mal.

                          Lo!

                          1. Hallo dedlfix,
                            vielen Dank nochmals für deine Hilfe.

                            Da der Konverter beim Auswählen der Quelle keine derartige Option bietet und auch kein initiales Statement angegeben werden kann, bleibt nur, bei der Eingabe des Source-Query-Statements ein SET sql_mode = ANSI_QUOTES; voranzustellen. Probier das mal.

                            Wo meinst du soll ich das eingeben. Beim ODBC treiber ?

                            vielen Dank und viele Grüße
                            hawk

                            1. Hi!

                              Hallo dedlfix,
                              vielen Dank nochmals für deine Hilfe.

                              Da der Konverter beim Auswählen der Quelle keine derartige Option bietet und auch kein initiales Statement angegeben werden kann, bleibt nur, bei der Eingabe des Source-Query-Statements ein SET sql_mode = ANSI_QUOTES; voranzustellen. Probier das mal.

                              Wo meinst du soll ich das eingeben. Beim ODBC treiber ?

                              Man wählt doch in dem Konvertier-Programm zuerst die Quelle, dann das Ziel und danach kommt ein großes Eingabefeld, in das man ein Statement eingeben soll, das die gewünschten Daten aus der Quelle zieht - also ein "SELECT * FROM tabelle"-Statement. Und da gibst du dann

                              SET sql_mode = ANSI_QUOTES;
                                SELECT * FROM tabelle

                              ein. Der nächste Dialog müsste der sein, in dem man in der rechten Spalte das [dbo].[Query] in einen sinnvollen Tabellennamen ändern kann und unten den Button zum Mapping (Zuordnung, Typänderung).

                              Am Wochenende hab ich mit dem Tool eine Datenbank mit mehreren Tabellen übertragen. Nervig war, dass immer nur eine Tabelle zur gleichen Zeit übertragen werden konnte und man das Tool danach nur beenden konnte, so dass man für die nächste Tabelle die ganze Tippeltappeltour der Dateneingabe erneut durchlaufen musste. Die ANSI_QUOTES hab ich aber nicht benötigt, das ging ansonsten alles problemlos.

                              Lo!

                              1. Hallo

                                dann das Ziel und danach kommt ein großes Eingabefeld, in das man ein Statement eingeben soll, das die gewünschten Daten aus der Quelle zieht - also ein "SELECT * FROM tabelle"-Statement. Und da gibst du dann

                                SET sql_mode = ANSI_QUOTES;
                                  SELECT * FROM tabelle

                                ein.

                                Ahh, jetzt verstehe ich was du meinst. Ich arbeite anders mit dem Assisten. Es gibt ja zwei Möglichkeiten.
                                1. Copy data from one or more tables
                                2. Write a query to specifiy ..

                                Ich arbeite mit Option 1 und du meinst vermutlich Möglichkeit 2.

                                Ich habe mittlerweile mit dem neuen SQL Server Migration Assistant for MySQL weiter gearbeitet. Der funktioniert ganz gut. Man musste nur noch ein zusätzliches Pack installarieren, sonst werden die Daten nicht migriert.
                                Ich habe nur noch ein Problem mit einer MySQL Tabelle "elementvallue".

                                Hier habe ich die SPalte "ElementValueID" als AutoIncrement definiert. Diese ist ja dann auch Unique. Zusätzlich habe ich die SPalte "ElementGroupID" und "ElementValue" zusammen als "Unique". Das ist doch erlaubt oder?
                                Der Migration Wizard sagt nun aber:

                                Die Anweisung wurde beendet. Verletzung der UNIQUE KEY-Einschränkung '_...'. Ein doppelter Schlüssel kann in das ...-Objekt nicht eingefügt werden.

                                Kann das sein, das der SQL Server das nicht erlaubt?
                                vielen Dank und viele Grüße
                                hawk

                                1. Hi!

                                  Ahh, jetzt verstehe ich was du meinst. Ich arbeite anders mit dem Assisten. Es gibt ja zwei Möglichkeiten.

                                  1. Copy data from one or more tables
                                  2. Write a query to specifiy ..

                                  Die erste Option bietet er mir gar nicht an, glaub ich. Da gibts irgendwann eine Seite, da ist das erste grau und das zweite aktiviert. Das wird vermutlich diese Stelle sein.

                                  Lo!

                                  1. Hallo,

                                    ok, abschließend kann ich sagen. Ich habe nun die Migration des Datenbankschema und aller Daten mit dem SSMA hinbekommen. Es funktioniert eigentlich recht gut. Natürlich muss man trotzdem noch einiges kontrollieren und beachten wie z.b. die Behandlung von ENUM Datentypen und anderen Dingen.

                                    Ich habe mal ein kleines Tutorial auf Englisch mit Screenshots begonnen. Vielleicht kann das ja mal jemand brauchen.

                                    vielen Dank und viele Grüße
                                    hawk

      2. Hoi!

        Das schimpft sich datetime.

        Time gibt es aber auch. Vielleicht hat der Konverter einen Fehler gemacht, bei mir wollte er die MySQL-Time-Spalte auf Bigint mappen.

        Time hab ich hier ums verrecken nicht. Mit timestamp koennte ich noch dienen.

        10 Minuten spaeter, weil sich ein Verdacht auftat:

        So. Kommando zurueck. Wir hatten zwar grad viel Trubel um einen neuen SQL Server, 'tolles update, alles neu' und so, aber grad stell ich fest, dass wir scheinbar lediglich eine alte 2000er Version bekommen haben. Davor hatten wir 2003 und wir waren der Meinung ein 2008 Update zu bekommen. Scheinbar hatte aber nur mal wieder Jemand in der Region bedarf nach etwas neuerer Tech und hat uns mal eben zum Tauschen gezwungen. Jetzt schiebt man sogar Ueberstunden um reibungslose Serverwechsel zu ermoeglichen und dann bekommt man altes Zeug...

        Ich weiss also doch nicht, was 2008 so alles kann. Mag sein, dass der time kennt.

        Ich geh jetzt weinen.

        --
        Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.