Ok, wenn theoretisch doppelte Datensätze entstehen können, weil durch Zeitumstellung, Uhrenkorrektur, ... eine Zeit mehrfach vorkommen kann, entfällt das Update auf den ältesten Datensatz über den Datums-/Zeitwert, da dieser ja mehrfach vorhanden sein könnte.
Dann könnte man für die ID eine Sequenz nehmen und die beim Update
immer auf den nächsten Wert der Sequenz setzen. Damit wäre es immernoch möglich das Update (wie oben skizziert) auf den Satz mit der ältesten (kleinsten) ID zu machen, das Berechnen der ID des zu aktuallisierenden Satzes kann dann trotzdem entfallen und die korrekte Sortierung der Datensätze bleibt beim Order By ID bestehen, auch wenn Zeiten mehrfach vorhanden sein sollten.
Ungefähr sowas:
SQL-Code:
CREATE SEQUENCE Seq_LogTableID AS BIGINT START WITH 1 INCREMENT BY 1;
CREATE OR ALTER TRIGGER trg_LogTableID ON LogTable AFTER UPDATE AS
BEGIN
SET NOCOUNT ON;
-- Jede vom UPDATE betroffene Zeile bekommt jetzt eine neue ID, durch neuen Sequencewert.
UPDATE LogTable SET LogTable.ID = NEXT VALUE FOR Seq_LogTableID
FROM LogTable
INNER JOIN inserted ON LogTable.ID = inserted.ID;
END