SQL备份表数据

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

猜你喜欢

转载自blog.csdn.net/qq_33172029/article/details/82049677