57

理想的には、私はこれをしたい:

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

英語で: DB から上位 10 件の使用可能な (ステータス = 0) メッセージを取得し、それらをロックします (ステータス = 10)。優先度の高いメッセージが最初に取得されます。

残念ながら、MS SQL では更新で order by 句を使用できません。

とにかくこれを回避する方法は?

4

5 に答える 5

50

最初に優先度順に並べられた上位 10 の ID を取得し、次にそのサブクエリにある ID を更新するサブクエリを実行できます。

UPDATE  messages 
SET status=10 
WHERE ID in (SELECT TOP (10) Id 
             FROM Table 
             WHERE status=0 
             ORDER BY priority DESC);
于 2009-03-17T16:35:43.867 に答える
2
UPDATE messages SET 
 status=10 
WHERE ID in (SELECT TOP (10) Id FROM Table WHERE status=0 ORDER BY priority DESC);
于 2009-03-17T18:42:24.593 に答える