理想的には、私はこれをしたい:
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
英語で: DB から上位 10 件の使用可能な (ステータス = 0) メッセージを取得し、それらをロックします (ステータス = 10)。優先度の高いメッセージが最初に取得されます。
残念ながら、MS SQL では更新で order by 句を使用できません。
とにかくこれを回避する方法は?
理想的には、私はこれをしたい:
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
英語で: DB から上位 10 件の使用可能な (ステータス = 0) メッセージを取得し、それらをロックします (ステータス = 10)。優先度の高いメッセージが最初に取得されます。
残念ながら、MS SQL では更新で order by 句を使用できません。
とにかくこれを回避する方法は?
最初に優先度順に並べられた上位 10 の ID を取得し、次にそのサブクエリにある ID を更新するサブクエリを実行できます。
UPDATE messages
SET status=10
WHERE ID in (SELECT TOP (10) Id
FROM Table
WHERE status=0
ORDER BY priority DESC);
UPDATE messages SET
status=10
WHERE ID in (SELECT TOP (10) Id FROM Table WHERE status=0 ORDER BY priority DESC);