Announcement

Collapse
No announcement yet.

Update Befehl - Anzahl des Resultsets einschränken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Update Befehl - Anzahl des Resultsets einschränken

    Hallo,
    ich arbeite zur Zeit mit einer Access 07 Datenbank und möchte auf eine bestimmte Anzahl eines Resultsets einen Update Befehl anwenden.

    Meine Abfrage liefert mir 160 Datensätze:

    Code:
    SELECT Artikelbezeichnung
    FROM Artikel Where Artikelbezeichnung = 'Notebook, Lenovo, 17"' And BNR = 1337
    Ich möchte auf 60 von diesen Datensätze meinen Update Befehl anwenden, aber ich weiss nicht wie. Der Standard Update Befehl würde ja so aussehen:

    Code:
    UPDATE Artikel SET WA = 1
    Where Artikelbezeichnung = 'Notebook, Lenovo, 17"' And BNR = 1337
    aber das würde alle Datensätze einbeziehen und ich möchte nur 60 aktualisiert haben

    Der Top (60) Befehl liefert mir innerhalb der Select Anweisung meine 60 Datensätze, aber der Top Befehl ist in der Update Anweisung scheinbar nicht zulässig: Syntax error...

    Hat jemand eine Idee. Danke!

  • #2
    Hallo,
    Originally posted by Trolleule View Post
    ...Ich möchte auf 60 von diesen Datensätze meinen Update Befehl anwenden, aber ich weiss nicht wie.
    auf welche 60 denn? Diese 60 mußt du schon irgendwie eindeutig identifizieren, ggfs. indem du ein Subselect verwendest.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Die 60 Datensätze identifiziere ich so:

      SELECT Top 60 *
      FROM Artikel Where Artikelbezeichnung = 'Notebook, Lenovo, 17"' And BNR = 1337

      Wie ich das jetzzt mit dem Update Befehl verknüpfe weiss ich nicht

      Comment


      • #4
        Originally posted by Trolleule View Post
        Die 60 Datensätze identifiziere ich so:

        SELECT Top 60 *
        FROM Artikel Where Artikelbezeichnung = 'Notebook, Lenovo, 17"' And BNR = 1337
        Nein, Damit identifizierst du alle 160 Datensätze, von denen du dir lediglich die ersten 60 anzeigen läßt! Diese ersten 60 sind auch noch völlig zufällig, da keine Sortierreihenfolge vorgegeben ist. Für ein vernünftiges Update benötigst du ein Kriterium, welches die Menge der 60 zu ändernden DS exakt beschreibt. Das kann durchaus ein
        [highlight=sql]
        ...
        where id in (
        SELECT Top 60 id
        FROM Artikel Where Artikelbezeichnung = 'Notebook, Lenovo, 17"' And BNR = 1337)
        [/highlight]
        sein. Allerdings nur, wenn Access ein TOP im Subselect unterstützt und du solltest dir darüber im klaren sein, dass es 60 ZUFÄLLIGE DS sind, die geändert werden. Wenn du dieses Update also zweimal hintereinander ausführst, ist nicht klar wieviele und schon gar nicht welche DS insgesamt geändert wurden.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Zu den Anmerkungen von Falk kommt noch eine Eigenart von MS Access hinzu.
          Nur weil Du TOP 60 hinschreibst, heisst das noch lange nicht, das Du auch genau 60 Datensätze bekommst, das können auch 61 oder 1000 sein.
          Grund ist, das Access sich nicht entscheiden mag, was den nun die TOP n sind.
          Beispiel: Du willst die Top n von einem Datumsfeld. Bis n-1 sind es eindeutige Werte, ab n kommen 20 mal das gleiche Datum, dann bekommst n + 19 Datensätze, den dem Wert nach sind es 60.
          Bei "richtigen" RDBMS ist das anders, die hören nach genau n Datensätze auf.
          Olaf Helper

          <Blog> <Xing>
          * cogito ergo sum * errare humanum est * quote erat demonstrandum *
          Wenn ich denke, ist das ein Fehler und das beweise ich täglich

          Comment

          Working...
          X