SQL While循环继续运行

时间:2018-09-21 19:09:09

标签: sql while-loop

delete from summary
Declare @rows int
set @rows=0


while @rows <29000
begin
    insert into Summary 
    select  * from table a full join table b on 
    ID = ID
    where pk is not null
end

我尝试运行上面的代码,但是它一直运行着而没有停止,当我最终停止它时,它给出了以下结果:

  

(受影响的28029行)

     

(受影响的28029行)   讯息2627,第14级,州1,第13行   违反PRIMARY KEY约束“ PK_Summary”。无法在对象“ dbo.Summary”中插入重复键。   该声明已终止。

然后我认为这是PK问题,因此我从表中删除了所有内容,仅在不使用while循环的情况下运行insert语句,并且它可以正常工作。因此,我猜测还有其他问题,但是我不知道这是什么。有人可以为我指出吗?而且我已经验证了表中只有28K +行。

1 个答案:

答案 0 :(得分:0)

请考虑在循环内更新@rows变量,以避免无限循环。

这可以通过

完成
SET @rows = @@ROWCOUNT

但是,这仍将导致查询执行两次并违反主键。您将需要多几行以避免两次运行查询。

由于您的意图是限制插入的行,因此建议您使用TOP来限制所选的行而不是循环。

insert into Summary 
select top 29000 * from table a full join table b on ID = ID
where pk is not null

此外,我建议在任何具有TOP的查询中提供ORDER BY子句。如果您没有定义顺序,则数据库可以决定顺序,而数据库可以根据自己的喜好做出不同的决定。