Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So stellen Sie Daten aus einer abgeschnittenen Tabelle wieder her

Wenn Sie TRANSACTIONS in Ihrem Code verwenden, kann TRUNCATE rückgängig gemacht werden. Wenn keine Transaktion verwendet wird und die TRUNCATE-Operation festgeschrieben wird, kann sie nicht aus der Protokolldatei abgerufen werden. TRUNCATE ist eine DDL-Operation und wird nicht in der Protokolldatei protokolliert.

DELETE und TRUNCATE können beide zurückgesetzt werden, wenn sie von TRANSACTION umgeben sind, wenn die aktuelle Sitzung nicht geschlossen ist. Wenn TRUNCATE im Abfrageeditor geschrieben wird, umgeben von TRANSACTION und wenn die Sitzung geschlossen ist, kann sie nicht rückgängig gemacht werden, aber DELETE kann rückgängig gemacht werden.

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