日期:2014-05-17  浏览次数:20606 次

【求助】SQL2008怎么做一个回收站的功能
本帖最后由 victoryboss 于 2012-12-18 10:43:19 编辑
SQL2008怎么做一个回收站的功能,误删除再恢复的功能

比如,我错误的删除了某个班级,后来我又想恢复这个班级(或者重新添加进去,但是还是以前的GUID)

但是它的主键我用的是GUID,因为这个班和其他表的相关联的信息都是通过这个GUID联系起来的,怎么再把这个班级以前的GUID给找回来

T_Class表


T_ClassCourse表中F_ClassId中通过他在T_class表中的F_ID(即GUID)联系的Course

------解决方案--------------------
写个触发器咯  在一个数据表上写个触发器   当删除的时候把删除的数据插入到备份表中
------解决方案--------------------
回收站?
把每个表都建一个回收表,删除时在主表删除,并添加到回收表中.
我的做法是将整个数据库里重要的操作提取出一些共同的列,删除时归并到这个表中,去除不重要的细节.
------解决方案--------------------
可以建立一個回收表.
--e.g.
If object_id('tbA')is null
    Begin
        Create table tbA (ID uniqueidentifier,value nvarchar(50))
        Insert into tbA Values(newid(),N'this is test!')
        Insert into tbA Values(newid(),N'this is test,too!')
    End

If object_id('tbA_ARV')is null
    Select *,Convert(datetime,null) As Date Into tbA_ARV From tbA Where 1=2

Delete
From tbA
Output Deleted.*,Getdate()
Into tbA_ARV

Insert into tbA(ID,value)
    Select ID,Value from tbA_ARV

Delete From tbA_ARV 
    Where ID in(Select ID from tbA)
    
    

把刪除的數據添加在tbA_ARV表,如果你需要恢復刪除的數據時,就可以從tbA_ARV表中抽取相關的數據并添加在tbA,然後在刪除已添加到tbA的數據.
------解决方案--------------------
在表中多加一列:isdelete,当0时为不删除,1时为逻辑删除,当第一次放到回收站时,改成1.平时查询的时候也加上个where isdelete的条件。当在回收站删除时,才彻底删除这条数据。