Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (P-Z)

 

UPDATE-Anweisung [SQL Remote]

Sie verwenden diese Anweisung, um Daten in der Datenbank zu ändern.

Syntax 1
UPDATE Tabellenliste
SET Spaltenname = Ausdruck, ...
[ VERIFY ( Spaltenname, ... ) VALUES ( Ausdruck, ... ) ]
[ WHERE Suchbedingung ]
[ ORDER BY Ausdruck [ ASC | DESC ], ... ]
Syntax 2
UPDATE Tabellenname 
PUBLICATION Publikationsname 
{ SUBSCRIBE BY  Subskriptionsausdruck |
      OLD SUBSCRIBE BY   alter_Subskriptionsausdruck
      NEW SUBSCRIBE BY   neuer_Subskriptionsausdruck } 
WHERE Suchbedingung
Ausdruck: Wert | Unterabfrage
Parameter
  • Tabellenname   Der Tabellenname kennzeichnet die Tabelle, die in den entfernten Datenbanken geändert werden muss.

  • Publikationsname   Der Publikationsname kennzeichnet die Publikation, bei der Subskriptionen geändert werden müssen.

  • Subskriptionsausdruck   Der Subskriptionsausdruck ist der Wert, den SQL Remote verwendet, um sowohl die neuen als auch die vorhandenen Empfänger der Zeilen zu ermitteln. Der Subskriptionsausdruck ist entweder ein Wert oder eine Unterabfrage. Alternativ können Sie OLD- und NEW-Subskriptionsausdrücke eingeben.

  • WHERE   Die WHERE-Klausel gibt an, welche Zeilen zwischen den subskribierten Datenbanken zu übertragen sind.

Bemerkungen

Die UPDATE-Anweisung wird verwendet, um Zeilen einer oder mehrerer Tabellen zu ändern. Jede benannte Spalte wird auf den Wert des Ausdrucks auf der rechten Seite des Gleichheitszeichens gesetzt. Es gibt keine Einschränkungen für Ausdruck. Sogar Spaltenname kann im Ausdruck verwendet werden—der alte Wert wird verwendet.

Wenn keine WHERE-Klausel angegeben ist, wird jede Zeile aktualisiert. Wenn eine WHERE-Klausel angegeben ist, werden nur jene Zeilen aktualisiert, die der Suchbedingung entsprechen.

Normalerweise ist die Reihenfolge, in der Zeilen aktualisiert werden, unbedeutend. In Verbindung mit der Funktion NUMBER(*) kann eine Sortierfolge jedoch nützlich sein, damit ansteigende Zahlen den Zeilen in der angegebenen Reihenfolge hinzugefügt werden. Wenn Sie beispielsweise 1 den Primärschlüsselwerten in einer Tabelle hinzufügen möchten, ist es notwendig, dies in absteigender Sortierfolge der Primärschlüssel durchzuführen, um keine doppelten Primärschlüssel während dieses Vorgangs zu erhalten.

Ansichten können aktualisiert werden, solange die SELECT-Anweisung, die die Ansicht definiert, keine GROUP BY-Klausel oder Aggregatfunktion enthält, bzw. nicht mit einer UNION-Klausel zusammenhängt.

In Tabellen eingefügte Zeichenfolgen werden immer in der eingegebenen Groß-/Kleinschreibung gespeichert, unabhängig davon, ob die Datenbank auf Groß-/Kleinschreibung reagiert. Daher wird eine Zeichendatentyp-Spalte, die mit der Zeichenfolge "Value" aktualisiert wird, in der Datenbank immer mit einem groß geschriebenen V und den restlichen Buchstaben in Kleinschreibung enthalten sein. SELECT-Anweisungen geben die Zeichenfolge als Value zurück. Wenn die Datenbank die Groß-/Kleinschreibung jedoch nicht berücksichtigt, ist Value dasselbe wie value, VALUE usw. Wenn außerdem ein Primärschlüssel für eine Spalte einen Eintrag mit Value enthält, wird ein INSERT von value zurückgewiesen, da der Primärschlüssel dann nicht eindeutig wäre.

Mit der optionalen FROM-Klausel können Tabellen auf der Grundlage von Joins aktualisiert werden. Wenn die FROM-Klausel vorliegt, qualifiziert die WHERE-Klausel die Zeilen der FROM-Klausel. Daten werden nur in der Tabellenliste aktualisiert, die unmittelbar auf das Schlüsselwort UPDATE folgt.

Wenn eine FROM-Klausel verwendet wird, ist es wichtig, dass der zu aktualisierende Tabellenname in beiden Teilen der Anweisung gleich qualifiziert wird. Wenn ein Korrelationsname einmal verwendet wird, muss derselbe Korrelationsname auch beim nächsten Mal verwendet werden. Sonst wird eine Fehlermeldung ausgegeben.

Syntax 1 und Syntax 2 gelten nur für SQL Remote.

Syntax 2 ohne OLD und NEW SUBSCRIBE BY-Ausdrücke muss in einem BEFORE-Trigger verwendet werden.

Syntax 2 mit OLD und NEW SUBSCRIBE BY-Ausdrücken kann überall verwendet werden.

Syntax 1 ist nur für die Verwendung mit SQL Remote für Aktualisierungen von Einzelzeilen vorgesehen, die durch den Nachrichtenagenten ausgeführt werden. Die VERIFY-Klausel enthält eine Wertmenge, die in den zu aktualisierenden Zeilen erwartet wird. Wenn die Werte nicht übereinstimmen, werden alle RESOLVE UPDATE-Trigger ausgelöst, bevor die Aktualisierung weitergeführt wird. Das UPDATE schlägt nicht fehl, wenn die VERIFY-Klausel nicht zutrifft. Wenn die VERIFY-Klausel angegeben ist, kann immer nur eine Tabelle gleichzeitig aktualisiert werden.

Syntax 2 wird nur mit SQL Remote verwendet. Wenn keine OLD- und NEW-Ausdrücke verwendet werden, muss die Syntax innerhalb eines BEFORE-Triggers benutzt werden, damit Zugriff auf die relevanten Werte besteht. Diese Syntax dient dazu, bei jeder Listenänderung eine vollständige Liste von SUBSCRIBE BY-Werten zu erhalten. Sie wird in SQL Remote-Triggern platziert, damit der Datenbankserver die aktuelle Liste von SUBSCRIBE BY-Werten ermitteln kann. Beide Listen werden im Transaktionslog abgelegt.

Der Nachrichtenagent verwendet diese zwei Listen, um sicherzustellen, dass die Zeile an alle entfernten Datenbanken übermittelt wird, die die Zeile noch nicht haben und jetzt benötigen. Der Nachrichtenagent entfernt die Zeile aus jeder entfernten Datenbank, welche diese Zeile hat, sie aber nicht länger benötigt. Eine entfernte Datenbank, die diese Zeile enthält und weiterhin benötigt, wird von der UPDATE-Anweisung nicht beeinflusst.

Syntax 2 der UPDATE Anweisung ermöglicht die explizite Angabe der alten SUBSCRIBE BY- und der neuen SUBSCRIBE BY-Liste, wodurch SQL Remote-Trigger wirksamer gemacht werden können. Wenn diese Listen nicht vorliegen, errechnet der Datenbankserver die alte SUBSCRIBE BY-Liste aus der Publikationsdefinition. Da sich die neue SUBSCRIBE BY-Liste im Allgemeinen nur leicht von der alten SUBSCRIBE BY-Liste unterscheidet, kann die Ermittlung der alten Liste zwei Mal erfolgen. Indem Sie sowohl die alte als auch die neue Liste angeben, wird dieser zusätzliche Aufwand vermieden.

Die OLD und NEW SUBSCRIBE BY-Syntax ist vor allem dann nützlich, wenn viele Tabellen im selben Trigger mit denselben Subscribe By-Ausdrücken verwendet werden. Dadurch kann die Performance erheblich gesteigert werden.

Der Ausdruck SUBSCRIBE BY ist entweder ein Wert oder eine Unterabfrage.

Syntax 2 der UPDATE-Anweisung wird verwendet, um eine spezifische SQL Remote-Funktion zu implementieren und muss innerhalb eines BEFORE-Triggers verwendet werden.

Bei Publikationen, die mit einer Unterabfrage in einem Subskriptionsausdruck erstellt werden, müssen Sie einen Trigger schreiben, der Syntax 2 der UPDATE-Anweisung enthält. So stellen Sie sicher, dass die Zeilen in den korrekten Subskriptionen bleiben.

Eine ausführliche Beschreibung dieser Funktion finden Sie unter BEFORE UPDATE-Trigger verwenden.

Syntax 2 der UPDATE-Anweisung nimmt einen Eintrag in das Transaktionslog vor, ändert aber die Datenbanktabelle nicht.

Berechtigungen

UPDATE-Berechtigung für die zu ändernden Spalten ist erforderlich.

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Erweiterung des Herstellers

Beispiel

Das folgende Beispiel transferiert den Mitarbeiter Philip Chin (employee 129) von der Verkaufsabteilung in die Marketingabteilung.

UPDATE Employees
VERIFY( DepartmentID ) VALUES( 300 )
SET DepartmentID = 400
WHERE EmployeeID = 129;