2017-08-04 76 views
1

我一直在用SQL服务器运行许多'insert into'语句,有时候还会循环运行。sql取消查询而不会将所有东西都还原

While 
begin 
    insert into 

end 

通常需要很长时间才能完成。有时我必须在完成之前取消查询。当我这样做时,它将恢复它插入的所有内容。有没有办法,我只取消'插入'它现在正在运行,并保持已经插入在前一个循环?

非常感谢。

回答

0

您只需明确定义从哪里开始和结束交易,那么它应该只有当它通过取消一半回滚“当前”的交易:

While 
begin 
BEGIN TRANSACTION; 
    insert into 
COMMIT TRANSACTION; 

end 

确保您了解这方面的影响在应用数据之前保证数据的完整性。例如。每次开始批次时,都要检查你上次的时间。

+0

无论您在交易中做什么,请记住,您现在必须自己检查数据完整性。否则,如果多次启动该批次,则由于多行插入同一行,您的数据可能会损坏。 – Adwaenyth

+0

给答案增加了一个警告,显然完全取决于'insert'实际做了什么。它有多远可能是不言而喻的,也可能是一团糟! – JeffUK

+0

非常感谢。我在插入之前为目标表创建了唯一的索引。所以重复不会发生。 – davidzxc574