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-Benutzerhandbuch » SQL-Dialekte und Kompatibilität » SQL-Dialekte » Datenbanken für die Transact-SQL-Kompatibilität konfigurieren

 

Spezielle timestamp-Spalten und timestamp-Datentypen in Transact-SQL

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.

Zwei Bedeutungen von timestamp

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.

Transact-SQL-Spalte "timestamp" in SQL Anywhere erstellen

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.

Der Datentyp einer timestamp-Spalte

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.

Aktualisierung mit tsequal

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.