我通过运行此查询来检索一些记录:
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,因为我希望一个实例只处理它检索的记录。
有什么想法吗?
答案 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”会阻止返回任何行。也许这就是你想要的。