2016-02-09 25 views
1

我通过运行此查询检索一些记录:C#SQL如何选择并处理N个记录,然后更新它们?

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状态= 0,因为我想一个实例只用它检索记录处理。

有什么想法?

+4

“记录没有主键”然后无法可靠地更新它们。没有可用于识别记录的值或组合值? –

+2

在任何情况下,您都需要添加一个主键,即使它是一个自动递增的数字,除了识别记录以外没有任何实际意义。 –

+0

[MSDN:Sql Server创建主键](https://msdn.microsoft.com/en-us/library/ms189039.aspx) – MethodMan

回答

0

你可以尝试这样的事:

UPDATE x 
SET [status] = 1 
FROM (
     SELECT * FROM [MyTable] order by [Date] OFFSET N ROWS FETCH NEXT 500 ROWS ONLY 
    ) x 
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返回。也许这就是你想要的。

+0

我刚试过它时,只有1条记录返回FETCH NEXT 500 ROWS ONLY。那一条记录成功返回。 –

相关问题