【发布时间】:2018-10-16 04:24:48
【问题描述】:
我正在尝试将几十万条记录插入到我的 SQL Server 表中。我想模拟数据库恢复,为此,我需要在插入过程中“中断”执行。我正在使用事务开始并逐批提交插入。假设我提交了 20k 条记录,并想为另外 20k 条记录开始事务,我想在第二批插入期间中断事务。
我知道终止执行,但它只是停止执行并且仍将插入记录。它不会以任何方式崩溃。我需要确保当我中断事务时,它最终不会被提交到数据库。
我有什么办法吗?
感谢任何建议。
【问题讨论】:
-
您是否尝试终止该进程?应该做的伎俩。否则,找到红色的大按钮。
-
@TomC 红色的大按钮只是终止进程。如果它没有被提交,它真的会回滚整个过程吗?
-
简单的解决方案是根据条件使用事务和回滚(包括TRY CATCH)。否则我们想知道你为什么要采取如此激烈的步骤。也许你也应该使用WAIT Delay
-
您是如何插入记录的,单独或使用批处理方法(例如 INSERT TableA SELECT FROM Table B)。如果没有显式的 BEGIN TRANSACTION,则每个单独的 INSERT 都被视为隐式事务,并在执行语句时提交。因此,如果它崩溃,那么在此之前的任何 INSERTS 都是有效的并且永远不会回滚。正如@KumarHarsh 提到的,使用显式事务并在事务期间中止将使您处于恢复状态。
-
我正在使用 Begin and Commit 事务逐批插入记录。我想先提交 20k 条记录,然后开始处理另外 20k 条记录,但在此过程中,我想中断它。
标签: sql sql-server