none
Primärschlüsseldef. gleich in Tabellenerstellungsabfrage mitgeben

    Allgemeine Diskussion

  • Hallo zusammen,

    in Access 2010 habe ich derzeit Tabellen definiert, die ich über eine Delete-Abfrage erst lösche und über eine Anfügeabfrage mit neuen Daten befülle. Die Quelldaten kommen aus verknüpften Datenbanktabellen und werden teilweise mit weniger Spalten als im Original aus Performancegründen lokal zwischengespeichert.

    Ich würde statt einer Anfügeabfrage gerne eine Tabellenerstellungsabfrage nutzen, dann muss ich die Daten vorher nicht löschen und sollte eine weitere Spalte in der Quelle hinzukommen muss ich nur diese Abfrage und nicht Tabelle und Abfragen anpassen.

    Mein Problem: Die betreffenden Tabellen haben je nachdem eine Spalte oder eine Kombination an Spalten als Primärschlüssel definiert. Jedes Mal wenn ich die Tabellenerstellungsabfrage ausführe geht diese Information verloren.

    Wie kann ich in dieser Abfrage zusätzlich ein oder mehrere Spalten als Primärschlüssel definieren?

    Ich weiß, dass es eine Datendefinitionsabfrage gibt, aber das wäre auch eine weitere Abfrage und da diese als zweite Abfrage ausgeführt werden würde, wären eventuell bereits Doubletten vorhanden.
    Hat jemand einen Tipp für mich?

    Vielen Dank und viele Grüße

    Markus

    Mittwoch, 25. April 2012 13:07

Alle Antworten

  • Da schaut's mau aus. Da wirst du um drei Abfragen nicht drum rum kommen:

    1. SELECT Feldliste INTO NeueTabelle FROM Quelle WHERE 0=1 ;

    2. CREATE INDEX PK_NeueTabelle ON NeueTabelle ( FeldlistePrimärschlüssel) WITH PRIMARY ;

    3. SELECT Feldliste INTO NeueTabelle FROM Quelle ;

    Mittwoch, 25. April 2012 14:38
    Moderator
  • Hallo Stefan

    Stefan Hoffmann [MVP] wrote:

    Da schaut's mau aus. Da wirst du um drei Abfragen nicht drum rum kommen:

    1. SELECT Feldliste INTO NeueTabelle FROM Quelle WHERE 0=1 ;

    2. CREATE INDEX PK_NeueTabelle ON NeueTabelle ( FeldlistePrimärschlüssel)
    WITH PRIMARY ;

    3. SELECT Feldliste INTO NeueTabelle FROM Quelle ;

    Wenn der Primärschlüssel bereits in der Quell-Tabelle vorhanden ist, lohnt es sich in diesem Fall den Primärschlüssel erst nach dem Einfügen der Datensätze in die neue Tabelle anzulegen. Das ist schneller. Das "Pseudo"-Insert Statement zu Begin braucht es dann nicht. Also einfach zuerst Schritt 3, dann Schritt 2 ausführen und gut ist's.

    Gruss
    Henry

    Donnerstag, 26. April 2012 04:31
  • Der OP sprach von Doubletten. Diese kommen wohl durch die Reduktion der Spalten zu stande..
    Donnerstag, 26. April 2012 07:21
    Moderator
  • Ja, so ganz klar ist das nicht. Er spricht von einer zweiten Abfrage die, falls es keinen PK gibt, zu Dupletten führen würde.

    Wenn er zuerst die erste Abfrage aus der Tabelle ausführt, die den gleichen PK hat, wie den, den er in der Zieltabelle anschliessend anlegt, gibt es noch keine PKs, sonst wäre die erste Tabelle korrupt. Nach Anlegen des PKs kann er dann die zweite Abfrage ausführen und somit wird er keine Dupletten in der Tabelle erhalten.

    Etwas anderes wäre es, wenn die Tabellenerstellungsabfrage die Daten nicht von einer Tabelle, sondern von einer Abfrage beziehen würde, welche ihrerseits bereits Dupletten drin hat. In diesem Fall würde wohl ein Distinct oder Group Statement helfen.

    Zumindest so habe ich das nach etwa 5-maligem Durchlesen verstanden.

    Gruss

    Henry

    Donnerstag, 26. April 2012 07:50
  • ****************************************************************************************************************
    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
    ****************************************************************************************************************

    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 4. Mai 2012 11:55
    Besitzer