How to update and order by using ms sql

前端 未结 5 1329
粉色の甜心
粉色の甜心 2020-11-28 08:35

Ideally I want to do this:

UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;

In English: I want to get the top

5条回答
  •  隐瞒了意图╮
    2020-11-28 09:14

    I have to offer this as a better approach - you don't always have the luxury of an identity field:

    UPDATE m
    SET [status]=10
    FROM (
      Select TOP (10) *
      FROM messages
      WHERE [status]=0
      ORDER BY [priority] DESC
    ) m
    

    You can also make the sub-query as complicated as you want - joining multiple tables, etc...

    Why is this better? It does not rely on the presence of an identity field (or any other unique column) in the messages table. It can be used to update the top N rows from any table, even if that table has no unique key at all.

提交回复
热议问题