1:情况说明
对某个表,需要进行某些删除或修改操作测试,但也需要数据还原,所以需要备份表中数据。
2:思路分析
一般操作,将表A所有的数据,备份到新建表B中(若有其他更屌的操作,请告诉我,万分感谢)。
3:具体SQL实现(库类型说明:SQL SERVER2008)
3.1:备份表数据
--使用哪个库说明
use CFAsset
begin
--AssetBorrowOut:备份表
--AssetBorrowOut_20180814:记录表,用于数据还原
--AssetBorrowOut_20180814,表名是随意的,并不需要先建立该表,备份中,会自行根据原表格式创建
select * into AssetBorrowOut_20180814 from AssetBorrowOut
end
3.2:业务操作,对表数据进行了不可恢复的操作,这里只用更新修改作为例子
use CFAsset
begin
--用于遍历读取游标中的deptid字段
declare @deptid int
--游标定义
declare cur_erCode cursor FOR
select deptid from dbo.AssetBorrowOut
--打开游标
open cur_erCode
fetch next from cur_erCode into @deptid
while(@@fetch_status=0)--固定写法
begin
--具体业务,具体实现
--deptid切换
update AssetBorrowOut
set status = 'ok'
where deptid = @deptid
fetch next from cur_erCode into @deptid --跳转到下一行,不然会死循环,类似指针
end
--关闭游标
CLOSE cur_erCode
--释放游标
DEALLOCATE cur_erCode
end
3.3:恢复数据,先删除备份表,然后将记录表,写回备份表中
删除数据
DELETE from AssetBorrowOut
--将记录表AssetBorrowOut_20180814数据插入到原来的备份表AssetBorrowOut中
--将自增主键关闭,
set IDENTITY_INSERT AssetBorrowOut ON
insert into AssetBorrowOut(borrowoutid,AssetId,DeptId,Handler,BorrowDeptId,
BorrowDept,Borrower,BeginDate,EndDate,Memo,ReturnDate,Returner,
Receiver,ReturnMemo,Operator,OperatorName,OperateTime,ReturnOperator,
ReturnOperatorName,ReturnOperateTime,BorrowerName,BorrowerCheckTime,erCode,status)
select
borrowoutid,AssetId,DeptId,Handler,BorrowDeptId,
BorrowDept,Borrower,BeginDate,EndDate,Memo,ReturnDate,Returner,
Receiver,ReturnMemo,Operator,OperatorName,OperateTime,ReturnOperator,
ReturnOperatorName,ReturnOperateTime,BorrowerName,BorrowerCheckTime,erCode,status from AssetBorrowOut_20180814
set IDENTITY_INSERT AssetBorrowOut OFF
注释:还有一种方法,是模仿3.1备份数据表做法,要加以验证,也不太确定是否有没问题。
将原来需要备份的表,删除,再重新通过备份记录表是形式,重新创建原表,并添加数据。
代码演示:
begin
drop table AssetBorrowOut
select * into AssetBorrowOut FROM assetborrowout_20180814
end