none
Migration Access SQL Server RRS feed

  • Frage

  • Hallo,

    Habe in mein Access die leeren Servertabellen per ODBC eingebunden wie ich sie im Access habe.

    Mittels Einfügeabfrage möchte ich die Daten von lokaler Tabelle in ODBC-Tabelle einfügen. Hat alles geklappt bis auf 1 Tabelle. Da bekomme ich Schlüsselverletzung bei allen! Datensätzen.

    Meine Abfrage in Access lautet:

    INSERT INTO dbo_tbl_Ventilplatte_Daten
    SELECT * FROM tbl_Ventilplatte_Daten

    Beide Tabellen sind identisch. Das Einfügen eines Autowert (Increment) hat bei den Tabellen vorher auch geklappt. Das einzige Feld welches indiziert ist ist das Autowert-Feld ID.

    Woher kommt dann die Fehlermeldung? In der Tabelle sind ca. 230T Datensätze.

    Gruß Andreas


    http://www.AccessBlog.de

    Freitag, 13. April 2012 13:30

Antworten

  • Hallo Andreas,

    ist auf SQL-Server Seite die "Auto-Feld-Id"-Spalte aktiv? Wenn ja, kommt der Fehler dort her, da bei aktivierter Identity-Spalte kein explizites Einfügen von Werten erlaubt ist.

    Lösungvorschlag:

    1. Nehme die Identity-Eigenschaft von der Spalte in der SQl Server Datenbank
    2. Füge deine Datensätze ein 
    3. Setze danach wieder die Identity-Eigenschaft auf die Spalte in der SQl Server Datenbank

    Gruß Christian

    • Als Antwort markiert Andreas Vogt Freitag, 13. April 2012 14:05
    Freitag, 13. April 2012 13:35

Alle Antworten

  • Hallo Andreas,

    ist auf SQL-Server Seite die "Auto-Feld-Id"-Spalte aktiv? Wenn ja, kommt der Fehler dort her, da bei aktivierter Identity-Spalte kein explizites Einfügen von Werten erlaubt ist.

    Lösungvorschlag:

    1. Nehme die Identity-Eigenschaft von der Spalte in der SQl Server Datenbank
    2. Füge deine Datensätze ein 
    3. Setze danach wieder die Identity-Eigenschaft auf die Spalte in der SQl Server Datenbank

    Gruß Christian

    • Als Antwort markiert Andreas Vogt Freitag, 13. April 2012 14:05
    Freitag, 13. April 2012 13:35
  • Hallo Christian,

    das hat funktioniert - aber bei den anderen Tabellen habe ich ja auch einen Increment-Wert eingefügt ohne Probleme.

    Gruß Andreas


    http://www.AccessBlog.de

    Freitag, 13. April 2012 14:05
  • Hallo Andreas,

    das kann ich mir nicht erklären.

    Wenn man auf dem SQL Server Tabellen mit Identity-Spalten kopieren will, nutzt man die "SET IDENTITY_INSERT" Anweisung, um das Verhalten kurzzeitig auszuschalten. Vielleicht gibt es in Access eine ähnliche Eigenschaft die bei den Access-Tabellen aktiviert ist.

    Mehr Info: http://msdn.microsoft.com/de-de/library/ms188059.aspx

    Gruß Christian

    Freitag, 13. April 2012 14:13
  • Hallo Andreas

    Andreas Vogt wrote:

    Mittels Einfügeabfrage möchte ich die Daten von lokaler Tabelle in
    ODBC-Tabelle einfügen. Hat alles geklappt bis auf 1 Tabelle. Da bekomme
    ich Schlüsselverletzung bei allen! Datensätzen.

    Meine Abfrage in Access lautet:

    INSERT INTO dbo_tbl_Ventilplatte_Daten
    SELECT * FROM tbl_Ventilplatte_Daten

    Beide Tabellen sind identisch. Das Einfügen eines Autowert (Increment)
    hat bei den Tabellen vorher auch geklappt. Das einzige Feld welches
    indiziert ist ist das Autowert-Feld ID.

    Selbst wenn beide Tabellen zur Zeit identisch sind, ist es eine sehr schlechte Angewohnheit, den * für INSERT statements als Feldname zu benutzen. Die Designer sind ja eigentlich gut genug, um Dir die Tipparbeit abzunehmen.

    Woher kommt dann die Fehlermeldung? In der Tabelle sind ca. 230T
    Datensätze.

    Im SQL Server kannst Du Identity Spalten nicht überschreiben. Wenn Du das machen willst, musst Du vorher SET IDENTITY_INSERT für diese Tabelle auf ON setzen. Ob das allerdings von Access aus gemacht werden kann, weiss ich nicht.

    Gruss
    Henry

    Mittwoch, 18. April 2012 03:12
  • Hallo Christian

    Christian C Gräfe wrote:

    Wenn man auf dem SQL Server Tabellen mit Identity-Spalten kopieren will,
    nutzt man die "SET IDENTITY_INSERT" Anweisung, um das Verhalten
    kurzzeitig auszuschalten. Vielleicht gibt es in Access eine ähnliche
    Eigenschaft die bei den Access-Tabellen aktiviert ist.

    Nein, eigentlich gibt es das für JET nicht. Aber Jet erlaubt Bulk Inserts, wie den genannten, wenn Autonumber Felder involviert sind und schaltet das dann scheinbar selber kurzfristig aus.

    Gruss
    Henry

    Mittwoch, 18. April 2012 03:14