Будет ли мой запрос «откатывать» свои изменения, если я откажу в его выполнении - PullRequest
0 голосов
/ 06 февраля 2019

Я вообще не имею представления о транзакциях в 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 голосов
/ 06 февраля 2019

MERGE выполняется как один оператор с неявной транзакцией, поэтому вам не нужно явно указывать транзакцию для выполнения требуемой операции.

Потребуется ли моему запросу «откатить» свои измененияесли я отменю его выполнение

Нет, вам не нужно звонить ROLLBACK, в случае любого сбоя все изменения будут автоматически отменены.

РЕДАКТИРОВАТЬ: если вы хотите, чтобы при завершении запроса он не возвращался.Для этого сценария я могу предложить разбить логику на запуск в пакетном режиме, чтобы при завершении запроса только текущий пакет получал откат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...