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 +行。
答案 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子句。如果您没有定义顺序,则数据库可以决定顺序,而数据库可以根据自己的喜好做出不同的决定。