Как сказал @duffymo
DECLARE @FirstTab TABLE (Col1 INT, Col2 INT)
DECLARE @SecondTab TABLE (Col3 INT, Col4 INT)
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO @FirstTab ( Col1, Col2 ) VALUES ( 1,2 )
INSERT INTO @SecondTab ( Col3, Col4 ) VALUES ( 3,4 )
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
(вы, вероятно, также захотите добавить какой-нибудь механизм, чтобы сообщить вызывающему абоненту, был ли он успешным (и зафиксировал изменения) или неудачным (откатился))
Таким образом, идея заключается в том, что две вставки будут , оба произойдут, или ни того, ни другого. Если по пути возникнет исключение, он перейдет в блок catch
, чтобы откатить все, что уже было сделано. Но обычно он просто выполняет два ВСТАВКИ, фиксирует работу и продолжает свой путь.