如果取消执行,是否需要查询“回滚”其更改

时间:2019-02-06 13:01:18

标签: sql transactions sql-server-2014 rollback

我一般不了解SQL Manager(SSMS)中的事务。我们有一个查询,它期望它不会像它一样长时间运行,并且我们想知道如果取消它是否需要回滚更改。这是DBO.JEST具有700M行和SAP.JEST具有200M行的两个表之间的合并语句。我们的查询已经运行了5个小时,最好取消查询而不必回滚,因为这可能会花费很长时间。查询会回滚吗?如果可以,我们可以阻止它回滚吗?

查询:

MERGE [sap].JEST AS target
USING (SELECT * from dbo.JEST) AS source 
ON (
target.[MANDT]=source.[MANDT] AND
target.[OBJNR]=source.[OBJNR] AND
target.[STAT]=source.[STAT]
    )
WHEN MATCHED THEN 
    UPDATE SET 
        [MANDT]=source.[MANDT],
        [OBJNR]=source.[OBJNR],
        [STAT]=source.[STAT],
        [INACT]=source.[INACT],
        [CHGNR]=source.[CHGNR]
WHEN NOT MATCHED THEN
    INSERT ( 
        [MANDT],
        [OBJNR],
        [STAT],
        [INACT],
        [CHGNR]
         ) VALUES (
         source.[MANDT],
        source.[OBJNR],
        source.[STAT],
        source.[INACT],
        source.[CHGNR]
 );

1 个答案:

答案 0 :(得分:1)

MERGE作为具有隐式事务的单个语句运行,因此您无需显式提及事务即可执行所需的操作。

  

如果我取消查询的查询,则需要“回滚”其更改   执行

否,您无需致电ROLLBACK,万一发生任何故障,所有更改都会自动回滚。

编辑:如果您希望在终止查询时这样做,则不应回滚。对于这种情况,我建议您中断逻辑以分批运行,以便在终止查询时仅回滚当前批处理。