而且通过日志也查不到.truncate的操作不进入日志.

解决方案 »

  1.   

    是没日志,并且也不触发delete触发器,但是我问的是回滚!
      

  2.   

    create table t(ID int)
    insert t select 1go
    begin tran
    truncate table t
    rollback tran
    select * from tgo沒有事務時可用 log explorer恢復
      

  3.   

    truncate table 操作在事务中是可以回滚的,而你的事务中有:insert
    insert 
    truncate如果执行
    rollback那么回滚的是当前整个事务,而不只是truncate操作========================================
    http://www.dbtuning.cn
    主营:中小企业数据库管理、优化、调校服务
    ========================================
      

  4.   

    TRUNCATE TABLE操作不写日志,不可回滚的
      

  5.   


    我在SQL2000的查询分析器中执行,t表有1条记录,也就是truncate回滚了。为什么?
      

  6.   


    如果truncate是不可回滚的话,应该有一个表是空的,为什么两个表都没变化呢?
      

  7.   


    我的理解,Rollback操作不是通过事务日志来做的,Truncate操作的数据还在缓存在Buffer里。
      

  8.   

    truncate 可以回滚========================================
    http://www.dbtuning.cn
    主营:中小企业数据库管理、优化、调校服务
    ========================================
      

  9.   

    --可以回滾
    if object_id('tb')is not null drop table tb
    go
    create table tb(ID int ,sex nvarchar(2) check(sex in(N'男',N'女')))
    insert tb select 1,N'男'
    insert tb select 2,N'女'
    declare @err int
    set @err=0
    begin tran
      truncate table tb
      set @err=@err+abs(@@error)
      insert tb select 3,'asd' --錯誤語句
      set @err=@err+abs(@@error)
    if @err=0
        commit
    else 
        rollback
    go
    select * from tb
    /*ID          sex  
    ----------- ---- 
    1           男
    2           女(影響 2 個資料列)
    */
      

  10.   

    在Oracle中,只能回滚到truncate之后的操作,而回滚不到同一事务中truncate之前的操作。按这个测试结果,是SQL server 2000可以回滚truncate操作吗?
      

  11.   

    select * from abegin tran
    truncate table a
    select * from a
    rollback
    select * from a--结果如下,     代表能够回滚
    aid         aname
    ----------- ----------
    1           x
    2           y(2 行受影响)aid         aname
    ----------- ----------(0 行受影响)aid         aname
    ----------- ----------
    1           x
    2           y(2 行受影响)
      

  12.   

    --sql 不能在事务中使用的语句
    ALTER DATABASE 
    BACKUP LOG 
    CREATE DATABASE 
    DISK INIT 
    DROP DATABASE 
    DUMP TRANSACTION 
    LOAD DATABASE 
    LOAD TRANSACTION 
    RECONFIGURE 
    RESTORE DATABASE 
    RESTORE LOG 
    UPDATE STATISTICS 
      

  13.   

    begin tran 
    sql
    exception:rollback tran 
    commit tran
    整个这个是一个事务,我理解是不是回滚的是整个事务?而你其中的一部分语句只是事务的一部分而已。
    回滚的是整个事务,而不是你其中的某条语句。
      

  14.   


    既然测试结果说明是可以回滚的,那就是了。
    在SQL Server里,Truncate table操作只是不记录日志,进而导致无法从日志中恢复被清空的数据。
      

  15.   

    能回滚select * from abegin tran
    insert a values(3,'z')
    truncate table a
    insert a values(4,'a')
    select * from a
    rollback
    select * from a
    --结果
    aid         aname
    ----------- ----------
    1           x
    2           y(2 行受影响)
    (1 行受影响)(1 行受影响)
    aid         aname
    ----------- ----------
    4           a(1 行受影响)aid         aname
    ----------- ----------
    1           x
    2           y(2 行受影响)
      

  16.   


    大家都知道是回滚整个事务,只是在oracle中,一个事务中truncate操作之前的所有操作都会commit,之后的才rollback,我只是想看看和SQL server的区别。
      

  17.   

    你说的oracle中的回滚是没有commit之前的东西,只要不用truncate,都能回滚到commit之前的操作.
      

  18.   


    请看清楚,我说的是回滚到truncate之后的操作。
      

  19.   

    覺得真奇怪呀,truncate 可以會回滾呀.
      

  20.   

    我也不相信自己的测试结果,所以问问大家,我还以为是我的SQLserver有问题。看来和Oracle相差很大。
      

  21.   

    truncate 也是会记录日志只是它记录是每一个数据分页解除使用的情况,而delete记录的是每一笔记录的日志.在事务未提交之前,数据页都还是在buffer中的,所以rollback操作可以做的。
      

  22.   

    truncate在日志中是记录数据页解除使用的情况。这个是可以用DBCC LOG去验证的