2013-06-26 3 views
0

Если я закрою запрос между транзакцией «Начало транзакции» и совершить транзакцию в MS SQL, что произойдет, если я прекратил или прекратил выполнение запроса. Будут ли все изменения, которые были сделаны во время выполнения ROLLBACKED.?начать транзакцию и совершить транзакцию в MS SQL

ответ

0

Это зависит от вашего кода. Пока ваша транзакция существует, все изменения будут ожидаться откат или фиксация.

Возможно, вы захотите посмотреть this.

0

Нет. Транзакция будет по-прежнему активна - вы все-таки откатывались, не так ли? :) Запустите этот пример и посмотрите, что произойдет. Если вы разорвете во время транзакции, вы увидите, что значение 2 находится в таблице, но вам нужно откат или фиксация.

select 1 as x into #xxx 
GO 


begin transaction 

    insert into #xxx(x) select 2 
    -- ctrl+break before time runs out. 
    waitfor delay '00:00:10' 

commit transaction 


-- now try this: 
select * from #xxx 
rollback transaction 
select * from #xxx 
1

Ваша транзакция может оставаться открытым до тех пор, пока назвать что-то вроде ROLLBACK TRANSACTION или COMMIT TRANSACTION, или до тех пор, пока SQL принимает какое-то действие на него.

Подробнее:

Я на самом деле хотел бы воспользоваться этим при тестировании больших обновлений или исправлений. Вы можете иметь что-то вроде этого:

-- BEGIN TRANSACTION 
-- ROLLBACK TRANSACTION 
-- COMMIT TRANSACTION 

/* 
    A bunch of SQL code here 
*/ 

Затем вы можете выделить/запустить BEGIN TRANSACTION, а затем запустить весь сценарий. Если вы довольны результатами, вы можете выделить/запустить COMMIT TRANSACTION. Если нет, запустите ROLLBACK TRANSACTION. Поскольку эти строки закомментированы, они не влияют на общую транзакцию, если вы явно не выделяете и не запускаете их.