C# SQL 如何选择和处理 N 条记录,然后更新它们
本文关键字:记录 然后 更新 处理 何选择 SQL 选择 | 更新日期: 2023-09-27 18:33:51
我通过运行此查询来检索一些记录:
SELECT * FROM [MyTable] order by [Date] OFFSET N ROWS FETCH NEXT 500 ROWS ONLY
其中 N 是从 0 开始并递增 500 的数字。此应用程序有多个实例,每个实例获取 500 条记录。
现在的问题是,如何更新检索到的记录?记录没有主键。我尝试了这样的东西,但语法不正确:
UPDATE [MyTable] SET [status] = 1 order by [Date] OFFSET N ROWS FETCH NEXT 500 ROWS
注意:我不能使用 WHERE status = 0,因为我希望一个实例只处理它检索的记录。
知道吗?
你可以尝试这样的事情:
UPDATE x
SET [status] = 1
FROM (
SELECT * FROM [MyTable] order by [Date] OFFSET N ROWS FETCH NEXT 500 ROWS ONLY
) x
UPDATE x
SET x.[status] = 1
OUTPUT deleted.*
FROM
(
SELECT *
FROM [MyTable]
WHERE
[status] = 0
ORDER BY [Date]
OFFSET N ROWS FETCH NEXT 500 ROWS ONLY
) x;
但要小心,如果没有至少 500 行要返回,您的"获取下一个"会阻止返回任何行。也许这就是你想要的。