none
Access 2003 MSSQL Insert in Tabellen mit Autowert

    Frage

  • Hallo ich möchte eine MSSQL Tabelle mit daten aus Access füllen - dieses
    versuche ich über 2 wege

    mssql tabellen über odbc in access eingebunden

    oder

    access mdb in dem mssql server als verbindungsserver eingebunden

    funktioniert beides - so lange die mssql tabellen keinen schlüssel mit
    autowert haben

    ich habe dann die mssql tabelle mit

    SET IDENTITY_INSERT CSRdat_SQL.dbo.tblAdressen ON

    so eingestellt ich sie mit daten füllen können sollte - geht nur leider nicht

    wenn ich im mssql server  

    SET IDENTITY_INSERTCSRdat_SQL.dbo.tblAdressenON

    aufrufe bekomme ich als ergebnis =  Befehl(e) wurde(n) erfolgreich abgeschlossen.

    wenn ich dann ein INSERT INTO CSRdat_SQL.dbo.tblAdressen SELECT * FROM OPENQUERY(CSRDAT_ALT, 'SELECT tblAdressen.* FROM
    tblAdressen')

    bekomme ich diese meldung

    Ein expliziter Wert fr die Identittsspalte in der CSRdat_SQL.dbo.tblAdressen-Tabelle kann nur angegeben werden, wenn eine Spaltenliste verwendet wird und IDENTITY_INSERT auf ON festgelegt ist.

    Donnerstag, 8. März 2012 16:02

Antworten

Alle Antworten

  • Hallo!

    Probiere bitte einmal folgenden T-SQL-Code im MSSQL-Managementstudio aus:

    create table #quelle (id int identity(1,1) primary key, Z int)
    create table #ziel (id int identity(1,1) primary key, Z int)
    
    insert into #quelle (Z) Values (1)
    insert into #quelle (Z) Values (2)
    
    SET IDENTITY_INSERT #ziel ON
    insert into #ziel (id, Z) select id, Z from #quelle
    -- insert into #ziel select * from #quelle
    SET IDENTITY_INSERT #ziel OFF
    
    drop table #quelle
    drop table #ziel
    ... du musste einfach nur die Felder angeben.

    mfg
    Josef

    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch



    Freitag, 9. März 2012 09:13
  • Hallo Josef

    ich denke das ist jetzt zu viel für mich - ich verstehe nicht einmal was du da machst

    OK create insert drop ist schon klar aber #quelle #ziel

    kannst du mir da etwas auf die sprünge helfen was da dann passiert

    Danke

    Michael

    Freitag, 9. März 2012 17:21
  • Hallo!

    #xxx sind Temp-Tabellen im MSSQL-Server, die in der Tempdb angelegt werden.

    Ich wollte dir nur zeigen, was das für ein Fehler ist.

     insert into Zieltabelle select * from QuellTabelle

    löst genau den von dir gezeigten Fehler aus.

    insert into Zieltabelle (id, weitereFelder) select id, weitereFelder from Quelltabelle

    funktioniert, wenn du vorher identity_insert einstellst.

    mfg
    Josef



    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    • Bearbeitet Josef Pötzl Freitag, 9. März 2012 18:20
    • Als Antwort markiert MCDPone Samstag, 10. März 2012 09:44
    Freitag, 9. März 2012 18:19
  • Danke jetzt begreife auch ich es :)

    wie kann ich eigentlich den momentanen status von identity_insert feststellen also ob ON oder OFF

    kann man das im MSSQL-Managementstudio an der tabelleneigenschaften irgendwo sehen? oder von access vie sql abfragen?


    • Bearbeitet MCDPone Samstag, 10. März 2012 09:44
    Samstag, 10. März 2012 09:44