我一般不了解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]
);
答案 0 :(得分:1)
MERGE
作为具有隐式事务的单个语句运行,因此您无需显式提及事务即可执行所需的操作。
如果我取消查询的查询,则需要“回滚”其更改 执行
否,您无需致电ROLLBACK
,万一发生任何故障,所有更改都会自动回滚。
编辑:如果您希望在终止查询时这样做,则不应回滚。对于这种情况,我建议您中断逻辑以分批运行,以便在终止查询时仅回滚当前批处理。