2016-02-09 62 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。那一條記錄成功返回。 –

相關問題