SQL Server中TRUNCATE事务回滚操作方法


    我们一般都认为TRUNCATE是一种不可回滚的操作,它会删除表中的所有数据以及重置Identity列。
    如果你在事务中进行TRUNCATE操作,就能回滚。反之,它就不会从日志文件文件恢复数据。它不会在日志文件中记录删除的那些数据,它只在日志中记录数据页的单元分配。
    下面的例子就能解释上面的所说的.        
    复制代码 代码如下:
    USE temp_test_database
    GO
    --创建一个临时表
    CREATE TABLE TruncateTabel(ID INT)
    INSERT INTO TruncateTabel(ID)
    SELECT 1
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 3
    GO
    复制代码 代码如下:
    --检查插入的数据
    SELECT * FROM TruncateTabel
    如图:
    
    开始执行事务
    复制代码 代码如下:
    --开始事务
    BEGIN TRAN
    TRUNCATE TABLE TruncateTabel
    GO
    --回滚之前检查TruncateTable
    SELECT * FROM TruncateTabel
    GO
    F5执行,如图:
    
    执行回滚事务
    复制代码 代码如下:
    --回滚事务
    ROLLBACK TRAN
    GO
    再次检查表TruncateTable
    复制代码 代码如下:
    --回滚之后再次检查TruncateTable
    SELECT * FROM TruncateTabel
    GO
    F5执行,如图:
    
    总结一下,事务是可以对TRUNCATE操作进行回滚的。