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

时间:2016-02-09 19:33:54

标签: c# sql-server

我通过运行此查询来检索一些记录:

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

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

UPDATE x
 SET [status] = 1
FROM (
      SELECT * FROM [MyTable] order by [Date] OFFSET N ROWS FETCH NEXT 500 ROWS ONLY
      ) x

答案 1 :(得分:0)

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个返回,则“fetch next”会阻止返回任何行。也许这就是你想要的。