SQL Anywhere unterstützt die spezielle timestamp-Spalte in Transact-SQL. Die timestamp-Spalte wird zusammen mit der Systemfunktion tsequal verwendet, um zu überprüfen, ob eine Zeile aktualisiert wurde.
SQL Anywhere verfügt über einen TIMESTAMP-Datentyp, in dem genaue Datums- und Zeitangaben enthalten sind. Dieser unterscheidet sich von der speziellen Transact-SQL-Spalte TIMESTAMP und dem speziellen Transact-SQL-Datentyp TIMESTAMP.
Um eine Transact-SQL-timestamp-Spalte zu erstellen, müssen Sie zuerst eine Spalte erstellen, die den Datentyp TIMESTAMP (SQL Anywhere) und eine Standardeinstellung von "timestamp" hat. Die Spalte kann einen beliebigen Namen haben, obwohl der Name timestamp gebräuchlich ist.
Die folgende CREATE TABLE-Anweisung enthält beispielsweise eine Transact-SQL-Spalte timestamp:
CREATE TABLE tablename ( column_1 INTEGER, column_2 TIMESTAMP DEFAULT TIMESTAMP ); |
Die folgende ALTER TABLE-Anweisung fügt der Tabelle "SalesOrders" eine timestamp-Spalte in Transact-SQL hinzu:
ALTER TABLE SalesOrders ADD timestamp TIMESTAMP DEFAULT TIMESTAMP; |
In Adaptive Server Enterprise wird einer Tabelle mit dem Namen timestamp, für die kein Datentyp angegeben ist, automatisch der Datentyp TIMESTAMP zugeordnet. In SQL Anywhere müssen Sie selbst den Datentyp explizit zuordnen.
Adaptive Server Enterprise behandelt eine timestamp-Spalte als Domäne, die VARBINARY(8) ist und NULL zulässt, während SQL Anywhere eine timestamp-Spalte als den Datentyp TIMESTAMP behandelt, welcher aus Datum und Uhrzeit besteht, wobei Bruchteile einer Sekunde bis zur sechsten Dezimalstelle gespeichert werden.
Wenn für spätere Aktualisierungen aus der Tabelle Daten abgerufen, sollte die Variable, in die der timestamp-Wert abgerufen wird, mit der Art und Weise übereinstimmen, in der die Spalte beschrieben wurde.
In Interactive SQL müssen Sie möglicherweise die Option "timestamp_format" festlegen, um die Differenz der Zeilenwerte anzuzeigen. Die folgende Anweisung legt die Option "timestamp_format" so fest, dass alle sechs Stellen der Bruchteile einer Sekunde angezeigt werden:
SET OPTION timestamp_format='YYYY-MM-DD HH:NN:SS.SSSSSS'; |
Wenn nicht alle sechs Stellen angezeigt werden, kann es sein, dass einige timestamp-Spaltenwerte gleich zu sein scheinen. Sie sind es aber nicht.
Mit der Systemfunktion tsequal können Sie erfahren, ob eine timestamp-Spalte aktualisiert worden ist oder nicht.
Eine Anwendung kann beispielsweise mit SELECT eine timestamp-Spalte in eine Variable selektieren. Wenn mit UPDATE eine Aktualisierung einer der ausgewählten Zeilen abgesetzt wird, kann diese die Funktion tsequal verwenden, um zu überprüfen, ob die Zeile geändert wurde. Die Funktion tsequal vergleicht den timestamp-Wert in der Tabelle mit dem timestamp-Wert, den die SELECT-Anweisung geliefert hat. Identische Zeitstempel weisen darauf hin, dass keine Änderungen vorgenommen wurden. Wenn die Zeitstempel unterschiedlich sind, wurde die Zeile seit der Ausführung der SELECT-Anweisung geändert.
Die folgende Anweisung ist eine typische UPDATE-Anweisung, welche die Funktion tsequal verwendet:
UPDATE publishers SET City = 'Springfield' WHERE pub_id = '0736' AND TSEQUAL(timestamp, '2005/10/25 11:08:34.173226'); |
Das erste Argument der Funktion tsequal ist der Name der speziellen timestamp-Spalte; das zweite Argument ist der Zeitstempel, der in der SELECT-Anweisung abgerufen wurde. In Embedded SQL ist das zweite Argument voraussichtlich eine Hostvariable, die einen TIMESTAMP-Wert aus einer neuen FETCH-Anweisung für die Spalte enthält.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |