So wählen Sie einen Datensatz aus der Datenbank aus und aktualisieren ihn in einer atomaren Abfrage

8

Ich habe eine Anzahl von Datensätzen in einer Tabelle mit einer Statusspalte und möchte einen einzelnen Datensatz auswählen, bei dem Status = Ausstehend und in derselben atomaren Abfrage als Status = InProcess markiert ist. Was ist der beste Weg, das zu tun?

Dies ist erforderlich, weil mehrere Abfragen gleichzeitig ausgeführt werden können, um diese Datensätze zu verarbeiten, und ich möchte nicht, dass zwei Threads denselben Datensatz zur Verarbeitung abrufen.

    
lahsrah 20.04.2011, 06:27
quelle

4 Antworten

13

Sie können die OUTPUT-Klausel verwenden:

%Vor%

Hier können Sie den eingefügten Tabellennamen verwenden, wenn Sie eine Zeile mit neuem Status erhalten möchten oder gelöscht wenn alt.

    
Dalex 20.04.2011, 06:38
quelle
5

Hier ist ein Artikel über Verwenden von Tabellen als Warteschlangen .

Mit dieser Tabelle create table T (ID int identity, Status varchar(15))  So etwas sollte dich vor Deadlocks schützen.

%Vor%     
Mikael Eriksson 20.04.2011 06:46
quelle
3

Das sollte den Trick machen

%Vor%

SQL 2008 sollte sich um jedes Sperren für Sie kümmern.

    
tobias86 20.04.2011 06:31
quelle
0

Das folgende ist eine Art Hack, aber es funktionierte für atomare Lese / Updates:

%Vor%     
user3542243 16.04.2014 17:17
quelle