2009-10-05 3 views
45

Может ли команда SQL «обрезать таблицу» использоваться в транзакции? Я создаю приложение, и моя таблица имеет массу записей. Я хочу удалить все записи, но если приложение завершилось неудачно, я должен был отменить мою транзакцию. Удаление каждой записи занимает очень много времени. Мне интересно, использую ли я таблицу truncate, могу ли я отменить транзакцию и вернуть свои данные в случае сбоя. Я понимаю, что таблица truncate не записывает каждое удаление в журнал транзакций, но мне интересно, записывает ли он запись в журнал, чтобы откат работал.Таблица усечения внутри транзакции

+1

Я должен был уточнить, что я использую сервер MSSQL 2005. –

ответ

44

В SQL Server вы можете отменить TRUNCATE из транзакции. Как вы упомянули, он записывает удаление страниц в журнал.

+0

Спасибо, тонна сэр. –

15

В Oracle, TRUNCATE TABLE является оператором DDL, который нельзя использовать в транзакции (или, точнее, не может быть откат). AFAIK, если выполняется транзакция, когда выполняется оператор, транзакция фиксируется, а затем выполняется TRUNCATE и ее нельзя отменить.

В Informix поведение TRUNCATE несколько отличается; вы можете использовать TRUNCATE в транзакции, но после этого возможны только утверждения COMMIT и ROLLBACK.

Другие СУБД, вероятно, имеют свои собственные особенности работы TRUNCATE TABLE.

Смежные вопросы