2017-08-04 77 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