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,因为我希望一个实例只处理它检索的记录。

知道吗?

C# SQL 如何选择和处理 N 条记录,然后更新它们

你可以尝试这样的事情:

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 行要返回,您的"获取下一个"会阻止返回任何行。也许这就是你想要的。