2016-06-06 15 views
0

Ich habe eine Tabelle ohne PK oder Zeitstempel. SQL Server Update TOP von Datum eingegeben

Dies sind die Spalten

on_date type_id price_id processed 

I 50 Datensätze verarbeitet = 1 alle X Minuten aktualisieren müssen.

Mein Problem ist, dass der Code unten ein wenig zufällig wirkt und neueren Datensätze aktualisieren kann und ältere auszulassen, in meinem Backend große Sync-Probleme zu schaffen

UPDATE TOP (50) occ 
SET processed = 1 
FROM occ 

Wie konnte ich sicher, dass meine TOP 50 aktualisiert Aufzeichnungen sind die älteste Zeit?

Danke

+1

‚haben eine Tabelle [OCC] ohne PK oder Zeitstempel.‘ Entschuldigung, da ist dein Problem, das ich mir vorstelle. SQL garantiert keine bestimmte Reihenfolge zurückgegebener Datensätze, außer Sie geben die Reihenfolge an. Ich würde empfehlen, der Tabelle eine Identitätsspalte zu geben, dann mit der ID desc - – Cato

Antwort

0

von Where und ORDER BY-Klausel wie diese Zugabe - Order By on_date in Ihrer Anfrage.

UPDATE TOP (50) occ 
SET processed = 1 
FROM occ 
WHERE processed = 0 
Order By on_date 
+0

on_date ist kein Zeitstempel. Es kann nicht verwendet werden, um das Alter des Datensatzes festzulegen – PanosPlat

+0

@PanosPlat: Was ist dann der eindeutige Schlüssel in Ihrer Tabelle? –

+2

er hat keinen eindeutigen Schlüssel oder Timestamp, es ist in der ursprünglichen Frage, er fragt, wie man ohne Timestamp nach Timestamp sortiert - eigentlich, wenn du weißt, wie das geht, hätte ich etwas Neues gelernt – Cato

0

Die Antwort ist, dass, wenn Sie den Zeitstempel oder eine sequenzielle ID (wie ein Identitätsfeld) speichern - Sie können nicht garantieren können, dass TOP 50 die die ältesten 50 Datensätze zurückgibt. SQL scheint in solchen Fällen häufig zuerst die frühesten Datensätze zurückzugeben, aber dies ist kein garantiertes oder vorhersagbares Verhalten.

0

eine ID erstellen (Identitätsspalte) für jede Zeile in der Tabelle hinzugefügt und verwenden Sortieren nach ID in der Abfrage

UPDATE TOP (50) occ 
SET processed = 1 
FROM occ 
WHERE processed = 0 
Order By Id