Ungeschlossene Zeilen in einer "select top n" -Abfrage zurückgeben
Ich brauche eine MsSql-Datenbanktabelle und weitere 8 (identische) Prozesse, die parallel auf dieselbe Tabelle zugreifen. Dazu wird ein select top n erstellt, diese n Zeilen verarbeitet und eine Spalte dieser Zeilen aktualisiert. Das Problem ist, dass ich jede Zeile nur einmal auswählen und verarbeiten muss. Dies bedeutet, dass, wenn ein Prozess in die Datenbank gelangt ist und die obersten n Zeilen ausgewählt hat, der zweite Prozess diese Zeilen als gesperrt erkennt und die Zeilen von n bis 2 * n Zeilen auswählt, und so weiter ...
Ist es möglich, einige Zeilen zu sperren, wenn Sie sie auswählen, und wenn jemand die obersten n Zeilen anfordert, die gesperrt sind, um die nächsten Zeilen zurückzugeben, und nicht auf die gesperrten Zeilen zu warten? Scheint wie ein langer Schuss, aber ...
Eine andere Sache, an die ich gedacht habe - vielleicht nicht so elegant, aber sie klingt einfach und sicher - ist, in der Datenbank einen Zähler für die Instanzen zu haben, die Selects für diese Tabelle vorgenommen haben. Die erste Instanz erhöht den Zähler und wählt top n, die nächste erhöht den Zähler und wählt Zeilen von n * (i-1) bis n * i usw. aus.
Hört sich das nach einer guten Idee an? Haben Sie bessere Vorschläge? Jeder Gedanke wird sehr geschätzt!
Vielen Dank für Ihre Zeit