Jeśli używasz TRANSACTIONS w kodzie, TRUNCATE można wycofać. Jeśli nie użyto żadnej transakcji, a operacja TRUNCATE została zatwierdzona, nie można jej pobrać z pliku dziennika. TRUNCATE to operacja DDL i nie jest rejestrowana w pliku dziennika.
DELETE i TRUNCATE mogą zostać wycofane, gdy są otoczone przez TRANSACTION, jeśli bieżąca sesja nie jest zamknięta. Jeśli TRUNCATE jest napisane w Edytorze zapytań w otoczeniu TRANSACTION i jeśli sesja jest zamknięta, nie można jej cofnąć, ale DELETE można cofnąć.
USE tempdb
GO
-- Create Test Table
CREATE TABLE TruncateTest (ID INT)
INSERT INTO TruncateTest (ID)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
-- Check the data before truncate
SELECT * FROM TruncateTest
GO
-- Begin Transaction
BEGIN TRAN
-- Truncate Table
TRUNCATE TABLE TruncateTest
GO
-- Check the data after truncate
SELECT * FROM TruncateTest
GO
-- Rollback Transaction
ROLLBACK TRAN
GO
-- Check the data after Rollback
SELECT * FROM TruncateTest
GO
-- Clean up
DROP TABLE TruncateTest
GO