none
SQL Server Import-/Export-Assistent ändert datetime zu smalldatetime RRS feed

  • Frage

  • Hallo,

    ich versuche gerade Daten von SQL Server 2014 in eine neue Datenbank auf einem SQL Server 2012 zu importieren. Die Datumsspalten der Tabellen sind alle vom Typ datetime, aber der Assistent ändert die Zuordnung automatisch auf smalldatetime, weshalb der Import fehlschlägt.

    Ein manuelles Zuordnen der einzelnen Felder kommt auf Grund der vielen Spalten und Tabellen eigentlich nicht in Frage.

    Gibt es eine Möglichkeit das Mapping zu reparieren?

    Mittwoch, 28. September 2016 08:18

Alle Antworten

  • Hallo,

    dafür gibt es in der Tat Mapping Dateien und zwar im Ordner C:\Program Files (x86)\Microsoft SQL Server\<Version>\DTS\MappingFiles

    Für 2014 => 2012 müsste das die Datei MSSql12ToMSSql11.xml sein; hab gerade keine passende Installation zur Hand.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 28. September 2016 08:39
  • Hast Du schon mal versucht die Zieltabelle vorher mit einem Skript anzulegen?

    Dann sollte es keine Schwierigkeiten mit dem Mapping geben.


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Mittwoch, 28. September 2016 09:52
    Beantworter
  • Hallo Olaf,

    danke für die schnelle Antwort.

    In dem beschriebenen Verzeichnis hat es in der Tat einige Mapping-Dateien.

    Allerdings keine MSSql12ToMSSql11.xml, sondern nur Dateien vorheriger Versionen:

    In diesen ist das Mapping für diesen Datentyp korrekt (datetime --> datetime).

    Erzeugt man nun aus einer der vorhandenen Dateien die beschriebene MSSql12ToMSSql11.xml Datei oder ändert in den vorhandenen Dateien etwas ab so hat dies keine Auswirkung auf den Import-/Export-Assistenten.

    Dieser verwendet immer noch das falsche Mapping.

    Gibt es noch eine andere Einstellung?

    Mittwoch, 28. September 2016 10:05
  • Hallo,

    ich habe es eben nachgestellt. Wenn in den Spalten keine Werte sind welche datetime erfordern, tatsächlich der nächst kleiner Datentyp verwendet. Erst als ich tatsächlich eine Wert von Datetime dort stehen hatte wurde auch bei der Übertragung der Datetime Datentyp verwendet.

    Trage doch mal einen Testdatensatz ein welcher tatsächlich datetime (Beispielsweise '20120618 10:34:09.10 AM') nutzt und versuche es nochmal.

    Gruß Benjamin


    Benjamin Hoch
    MCSE: Data Platform
    MCSE: Data Management and Analytics
    MCSA: SQL Server 2012/2014
    MCSA: Windows Server 2012
    Blog

    Mittwoch, 28. September 2016 10:42
  • Hallo,

    dies ist ein interessanter Ansatz, leider in diesem Fall in diesem Fall nicht zutreffend.

    In dem entsprechenden Datenbankfeld stehen jede Menge Zeitangaben.

    Auch ein manuelles Ändern der Werte hat keine Veränderung gebracht.

    Ich habe das Szenario mit einem zweiten SQL 2014 Server nachgestellt. Und zwischen diesen Maschinen (2014 --> 2014) tritt das Problem nicht auf. Wird aber auf eine ältere Version des SQL Servers kopiert (auch SQL 2008 R2) kommt es zu dem falschen Mapping.

    Gruß Andy

    Mittwoch, 28. September 2016 12:52
  • Ich habe das Szenario noch einmal mit einem komplett neuen System nachgestellt:

    1. Betriebssystem installiert (Server 2012 R2)
    2. SQL Server 2014 (12.0.5000) installiert.
    3. Neue Datenbank mit einer einzigen Tabelle (mit datetime-Spalte) Erstellt.
    4. Diese Tabelle mit Export-/Import-Assistent auf SQL-Server 2012 (11.0.2100) kopiert.

    Ergebnis: Der Fehler ist wieder aufgetreten.

    Ich gehe mittlerweile davon aus, dass es sich hierbei um einen Bug / Fehler im SQL Server 2014 handelt.

    Mittwoch, 28. September 2016 14:33
  • Hallo,

    natürlich könnte man die Tabellen im Voraus durch ein Skript erzeugen und hätte dann keine Schwierigkeiten mit dem Mapping. Es handelt sich dabei aber um über 100 Tabellen mit teilweise weit mehr als 100 Feldern.

    In den Vorgängerversionen hat dies immer ohne Probleme funktioniert.

    Donnerstag, 29. September 2016 08:26
  • Hallo Andy,

    lass Dir doch einfach durch SSMS die SQL Skripte für die Tabellen & Abhängigkeiten anlegen: In SSMS Rechte Maus auf die DB => Tasks => Skripts generieren.

    Das hat zudem den großen Vorteil, das Du eben auch alle PK / FK, Indizes, Statistiken, Trigger etc. mit Skripten lassen kann. Der Import/Export Wizard legt nur dumpf die blanke Tabelle an.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 29. September 2016 10:34