我试图用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个数据。
我该怎么办?
答案 0 :(得分:1)
而不是SELECT子句中的TOP @BatchSize
,在WHERE子句之后尝试OFFSET @BatchSize * @Counter FETCH NEXT @Batchsize ROWS ONLY
。
根据评论,您可能还需要查看SELECT INTO
查询以及nolock
查询提示。