TRUNCATE
не генерира данни за връщане назад, което го прави светкавично бърз. Той просто освобождава страниците с данни, използвани от таблицата.
Ако обаче сте в транзакция и искате възможността да „отмените“ това изтриване, трябва да използвате DELETE FROM
, което дава възможност за връщане назад.
РЕДАКТИРАНЕ: Имайте предвид, че горното е неправилно за SQL Server (но се отнася за Oracle). В SQL Server е възможно да отмените операция за съкращаване, ако сте в транзакция и транзакцията не е била ангажирана. От гледна точка на SQL Server една ключова разлика между DELETE FROM и TRUNCATE е това :"Инструкцията DELETE премахва редове един по един и записва запис в регистрационния файл на транзакциите за всеки изтрит ред. TRUNCATE TABLE премахва данните, като освобождава страниците с данни, използвани за съхраняване на данните от таблицата, и записва само освобождаванията на страници в регистрационния файл на транзакциите ."
С други думи, има по-малко регистриране по време на TRUNCATE, тъй като само освобождаването на страницата се записва в регистрационния файл на транзакциите, докато при DELETE FROM се записва изтриването на всеки ред. Това е една от причините TRUNCATE да е светкавично бърз.
Обърнете внимание също така от тази MSDN връзка, че не можете да съкращавате таблици, които са посочени от ограничения на външен ключ, участват в индексиран изглед или са публикувани чрез използване на репликация на транзакции или репликация на сливане.
РЕДАКТИРАНЕ 2: Друг ключов момент е, че TRUNCATE TABLE ще нулира самоличността ви до първоначалното начало, докато DELETE FROM ще продължи да се увеличава от мястото, където е спряло. Справка:Отговорът на Бен Робинсън.