Idealnie chcę, aby to zrobić:Jak zaktualizować i porządek za pomocą MS SQL
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
W języku angielskim: Chcę otrzymać 10 najlepszych dostępnych (status = 0), wiadomości z DB i zablokować je (status = 10). Wiadomość o wyższym priorytecie powinna zostać odebrana jako pierwsza.
Niestety, MS SQL nie zezwala na klauzulę order by w aktualizacji.
W każdym razie, jak tego uniknąć?
biorąc pod uwagę, że chciałbym indeks dla tego rozwiązania. Czy będę wtedy używał: (priorytetowy opis, status) lub (status, priorytetowy opis)? Innymi słowy: czy zamówienie jest używane przed miejscem? – Toad
Faktycznie zapytanie nie było poprawne .... klauzula order by nie może być używana w podzapytaniu, O ile podane jest również TOP. (Tak mówi silnik SQL). Tak więc prawidłowe zapytanie powinno brzmieć: UPDATE messages SET status = 10 WHERE ID in (SELECT TOP (10) Id Z tabeli WHERE status = 0 ORDER BY priorytet DESC); – Toad
Masz rację, przegapiłem szczyt, kiedy napisałem ostatnią zmianę. Będę edytować, jak powiedziałeś –