Announcement

Collapse
No announcement yet.

Update eines bestimmten Feldes (x,y)

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

  • Update eines bestimmten Feldes (x,y)

    Hallo,

    mein Problem liegt in folgendem:
    Ich habe eine Tabelle mit nur einer Spalte, leider.
    Ich möchte nun einen bestimmten Datensatz, z.B. den dritten, updaten, ohne die anderen zu verändern.
    Mit UPDATE ... SET ... WHERE ... geht das irgendwie nicht. Gibts vielleicht eine andere Möglichkeit, vielleicht direkt mit Koordinaten?

    Vielen Dank im Vorraus,
    Mario.


  • #2
    Nein, es gibt keine Möglichkeit, da SQL <b>mengenorientiert</b> ist. Du braucht einen eindeutigen Schlüssel, sonst ist es keine relationale Tabelle, Satzpositionen sind zufällig

    Comment


    • #3
      Hallo,

      beim InterBase gibt es in diesem Fall eine Hintertür, da jede Tabelle implizit auch die unsichtbare Spalte <b>RDB$DB_KEY</b> hat. Innerhalb der gleichen Transaktion darf man diese Spalte als Primärschlüssel missbrauchen, so dass man zum Beispiel einen doppelten Datensatz aus einer Tabelle löschen kann, die selbst keinen Primärschlüssel deklariert. Die folgende Stored Procedure demonstriert diesen Sonderfall:
      <pre>
      CREATE PROCEDURE DelDupliOhneKey2 AS
      DECLARE VARIABLE vWort VARCHAR(20);
      DECLARE VARIABLE vOld VARCHAR(20);
      DECLARE VARIABLE cDBKEY CHAR(8);
      BEGIN
      FOR SELECT Wort, RDB$DB_KEY
      FROM OhneKey2
      ORDER BY Wort
      INTO :vWort, :cDBKEY
      DO
      BEGIN
      IF (vOld = vWort) THEN
      DELETE FROM OhneKey2 WHERE RDB$DB_KEY = :cDBKEY;
      ELSE
      vOld = vWort;
      END
      END^
      </pre>
      Anstelle der DELETE-Anweisung wäre auch ein UPDATE vorstellbar - allerdings ist das nur ein Notbehelf (für den Alltag im Mehrbenutzerbetrieb ist das nichts). Jede Tabelle einer SQL-Datenbank <b>muss</b> mit einem Primärschlüssel versehen werden (auch wenn der Server diese Regel nicht erzwingt).

      P.S: Bei derartigen Fragen sollte immer die verwendete Datenbank mit angegeben werden

      Comment

      Working...
      X