Ich habe eine Tabelle mit Datenzeilen, die ein StartTime (DATETIME) -Feld enthalten. Es gibt eine Reihe von Daten für jede Minute für ungefähr das letzte Jahr. Ich möchte eine Möglichkeit zum Ausführen eines Skripts zum Aktualisieren des StartTime-Felds, so dass die Zeitstempel "aktuell" sind (das sind Demodaten für eine Webanwendung).Alle Zeitstempel mit winzigen Intervallen aktualisieren
Meine Idee war, ROW_NUMBER() und DATEADD() zu verwenden, um jede Zeile mit einem neuen Zeitstempel zu aktualisieren, beginnend mit der aktuellen Zeit vor einem Jahr, und eine Minute pro Zeile durchlaufen.
Die Idee schien für eine SELECT-Anweisung zu arbeiten:
SELECT TOP 10
DATEADD(MINUTE,ROW_NUMBER() OVER (Order by StartTime),DATEADD(yy, -1, GETDATE())) AS Ds
FROM Test WHERE ItemId='0E0814B9-79A0-4BCF-AB33-B89D84CA3BEC' ORDER BY StartTime;
die erwarteten Zeitstempel getrennt um eine Minute produziert:
2015-12-21 17:57:55.550
2015-12-21 17:58:55.550
2015-12-21 17:59:55.550
Aber wenn ich das gleiche Konzept mit einer UPDATE-Anweisung versuchen:
WITH Datarows (Ds)
AS
(
SELECT DATEADD(MINUTE,ROW_NUMBER() OVER (Order by StartTime),DATEADD(yy, -1, GETDATE())) AS Ds
FROM Test
WHERE ItemId='0E0814B9-79A0-4BCF-AB33-B89D84CA3BEC'
)
UPDATE Test
SET StartTime = Ds
FROM Datarows
Alle Zeitstempel, die aktualisiert werden, sind dann gleich:
2015-12-21 17:30:14.463
2015-12-21 17:30:14.463
2015-12-21 17:30:14.463
Warum funktioniert das nicht? Wie kann ich alle Zeilen so aktualisieren, dass Zeitstempel um eine Minute getrennt sind?
Wie hängen die Tabellen in Ihrem Update zusammen? Es sieht so aus, als ob alle Zeilen in TEST mit allen Werten aus dem CTE aktualisiert werden, wobei nur die letzte Aktualisierung in der Spalte StartTime gespeichert wird. – Steven
@Steven Test ist die einzige Tabelle (keine Relationen). Ich möchte jede Zeile aktualisieren, so dass jeder Zeitstempel unterschiedlich ist, zeitlich um eine Minute getrennt. – mtmacdonald
In welcher Reihenfolge wird die TEST-Tabelle aktualisiert? – Steven