【求助】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的条件。当在回收站删除时,才彻底删除这条数据。