在sql中使用while循环

时间:2016-05-16 21:39:25

标签: sql-server

我试图用where子句循环我的记录。

我试图首先只获得前100行,然后是下一个100(某些逻辑我适用于我在select子句中获得的内容)

但是,如果前100行没有返回结果,则不会进入第2 100组数据。

我的查询是:

DECLARE @BatchSize INT = 100
DECLARE @Counter INT = 0
DECLARE @TableCount INT = 0
set @TableCount = (select count(*) from Table1)  //@TableCount = 10000

while @Counter < @TableCount/@BatchSize //@Counter < 100
BEGIN        
    SET @Counter=@Counter+1
    INSERT INTO Table4
    SELECT TOP(@BatchSize) * FROM Table2 
    WHERE NOT EXISTS (SELECT * Table3) and some condition

在这里,如果我没有获得前100行的数据,它将不会转到下一组100个数据。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

而不是SELECT子句中的TOP @BatchSize,在WHERE子句之后尝试OFFSET @BatchSize * @Counter FETCH NEXT @Batchsize ROWS ONLY

根据评论,您可能还需要查看SELECT INTO查询以及nolock查询提示。