• 分类

  • 重置

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

    如图:

    //img.jbzj.com/file_images/article/201605/https://www.lingkb.com/wp-content/uploads/2020/08/20200819094838-5f3cf5763cd4d.png

    开始执行事务

    复制代码 代码如下:
    –开始事务
    BEGIN TRAN
    TRUNCATE TABLE TruncateTabel
    GO
    –回滚之前检查TruncateTable
    SELECT * FROM TruncateTabel
    GO

    F5执行,如图:

    //img.jbzj.com/file_images/article/201605/https://www.lingkb.com/wp-content/uploads/2020/08/20200819094839-5f3cf57741f55.png

    执行回滚事务

    复制代码 代码如下:
    –回滚事务
    ROLLBACK TRAN
    GO

    再次检查表TruncateTable

    复制代码 代码如下:
    –回滚之后再次检查TruncateTable
    SELECT * FROM TruncateTabel
    GO

    F5执行,如图:
    //img.jbzj.com/file_images/article/201605/https://www.lingkb.com/wp-content/uploads/2020/08/20200819094840-5f3cf578a6aba.png

    总结一下,事务是可以对TRUNCATE操作进行回滚的。

发表评论

发表评论