Wie aktualisiert und bestellt man mit ms sql
Ideal ich dies tun möchten:
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
In Englisch: ich möchte die top-10 verfügbar (status=0) Nachrichten aus der DB und lock (status=10). Eine Nachricht mit einer höheren Priorität sollte geholt werden ersten.
leider MS SQL nicht erlaubt, die eine order by-Klausel in der update.
Sowieso, wie man dies umgehen?
InformationsquelleAutor der Frage Toad | 2009-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine Unterabfrage, wo Sie zum ersten mal die IDs der top 10 sortiert nach Priorität und aktualisieren Sie dann die diejenigen, die auf dieser sub-Abfrage:
InformationsquelleAutor der Antwort Eduardo Crimi
InformationsquelleAutor der Antwort Quassnoi
Ich habe zu bieten einen besseren Ansatz - Sie haben nicht immer den Luxus, eine Identität Feld:
Können Sie auch die sub-Abfrage so kompliziert, wie Sie möchten - verbinden mehrerer Tabellen, etc...
Warum ist das besser? Es ist nicht angewiesen auf die Anwesenheit von einem id-Feld (oder einer anderen eindeutigen Spalte) in der
messages
Tabelle. Es kann verwendet werden, um zu aktualisieren, werden die ersten N Zeilen aus einer Tabelle, selbst wenn die Tabelle keinen eindeutigen Schlüssel überhaupt.InformationsquelleAutor der Antwort mfascino
InformationsquelleAutor der Antwort dotjoe
Wie gesagt in den Kommentaren unten, Sie können auch die SET ROWCOUNT-Klausel, aber nur für SQL Server 2014 und älter.
Mehr info: http://msdn.microsoft.com/en-us/library/ms188774.aspx
Oder mit einer temp-Tabelle
InformationsquelleAutor der Antwort Jhonny D. Cano -Leftware-