【发布时间】:2017-03-01 02:17:09
【问题描述】:
我正在尝试读取像队列一样使用的数据库表的前 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 MSDN,ORDER BY 在UPDATE 中无效,并且:
在与 INSERT、UPDATE 或 DELETE 不按任何顺序排列。
如何实现我所需要的,即在选择队列顶部的项目的同时更新它们?
【问题讨论】:
-
您能否使用 TOP 和 ORDER BY 来获取唯一 ID 的列表,该列表将是前 100 个(排序/排序)行,并且只更新包含这些 ID 的表?下面是一个 CTE 示例:stackoverflow.com/a/9241466/6167855
标签: sql-server tsql queue sql-server-2014