2016-08-29 153 views
1

我想創建一個sql語句來刪除匹配某個條件的記錄1000,所有我嘗試但是不起作用。例如我曾嘗試批量刪除HSQLDB和SQuirreL

DECLARE @count int 
SET @count = 1000 
    DELETE FROM HISTORY 
    WHERE HISTORYID IN (
     SELECT TOP (@count) HISTORYID 
     FROM HISTORY 
     WHERE HISTTYPE = 14 
    ) 

DECLARE在HSQLDB不起作用。請有人給我一些關於如何通過SQL來實現的建議,不想從java端實現。

原因很簡單,當它試圖刪除150k記錄時,我有堆錯誤,所以我想將刪除分成更小的部分。

回答

1

As documented in the manual的HyperSQL支持對LIMIT聲明DELETE

所以只需運行,直到沒有行被刪除的任何更多:

DELETE FROM HISTORY 
WHERE HISTTYPE = 14 
LIMIT 1000; 

不要忘記提交或運行在自動提交模式

+0

不是我想要實現的。我知道'LIMIT',我可以用rownum實現同樣的事情。我想要在HSQLDB中進行一個循環,所以我不必手動運行這一條語句100或甚至1000次。 – codeCompiler77