gpt4 book ai didi

sql-server - 如何使用 ORDER BY 更新 TOP(n) 给出可预测的结果?

转载 作者:行者123 更新时间:2023-12-03 23:39:09 25 4
gpt4 key购买 nike

我正在尝试读取像队列一样使用的数据库表的前 100 项。当我这样做时,我试图将这些项目标记为这样:

UPDATE TOP(@qty)
QueueTable WITH (READPAST)
SET
IsDone = 1
OUTPUT
inserted.Id,
inserted.Etc
FROM
QueueTable
WHERE
IsDone = 0
ORDER BY
CreatedDate ASC;

唯一的问题是,根据 UPDATE (Transact-SQL) on MSDNORDER BYUPDATE 中无效,并且:

The rows referenced in the TOP expression used with INSERT, UPDATE, or DELETE are not arranged in any order.

如何实现我所需要的,即在选择队列顶部的项目的同时更新它们?

最佳答案

SQL Server 允许您更新派生表、CTE 或 View :

UPDATE x
SET
IsDone = 1
OUTPUT
inserted.Id,
inserted.Etc
FROM (
select TOP (N) *
FROM
QueueTable
WHERE
IsDone = 0
ORDER BY
CreatedDate ASC;
) x

无需先计算一组 ID。这更快,并且通常具有更理想的锁定行为。

关于sql-server - 如何使用 ORDER BY 更新 TOP(n) 给出可预测的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com