如果我终止循环 INSERT 查询,它会回滚自循环开始以来的所有插入还是仅回滚最后一次迭代?

J.D*_*.D. 1 sql-server insert transaction rollback sql-server-2016

如果以下循环查询在循环过程中被终止,是所有插入还是仅当前一个回滚?

DECLARE @LoopId INT = 1;

WHILE (@LoopId < 100)
BEGIN
    INSERT INTO Table2
    SELECT Field1 
    FROM Table1
    WHERE ForeignKeyField = @LoopId

    SET @LoopId = @LoopId + 1;
END
Run Code Online (Sandbox Code Playgroud)

Dav*_*oft 7

如果以下循环查询在循环过程中被终止,是所有插入还是仅当前一个回滚?

如果会话在循环之前已经启动了一个事务,那么所有的语句都将被回滚。但默认情况下,每个语句都在单独的事务中运行,并且只有当前运行的 INSERT 会被回滚。