sqlserver定时备份数据 sql语句

一、使用场景

今天在工作时遇到了一个问题,如何将两库源的表进行定时备份?在查找资料的时候,查到的都是直接使用sqlserver内置配件配置的,因此我尝试使用sql语句写了一遍。需求是这样的:每隔一分钟,将表A的数据备份到表B中,对于已存在的数据则不再进行备份。此次不写如何连接两数据库,如有需要请留言,我会再补充。

二、整体思路

大体的思路是:

1、声明变量后进入死循环,将要备份的A表数据全部取出 

2、使用游标拿到表A的一条数据

3、与表B进行对比,如果存在则不备份,若不存在则备份。

4、然后循环拿到每一条数据进行比对

5、设置时间延迟1分钟

6、再次进入死循环

7、如果要停止死循环,需手动点击sqlserver的停止按钮

三、sql语句

--每隔1分钟将A库A表备份到B库B表,如果有重复则不备份,Account为唯一值
--声明变量(变量结构与B表结构一致)
DECLARE @Account varchar(30) 
DECLARE @Password varchar(20) 
DECLARE @TelNumber varchar(11) 
DECLARE @IMEI varchar(15) 
--设置死循环,只有在强制关闭时才停止备份
WHILE(1<3) 
BEGIN 
--声明游标
DECLARE testcursor CURSOR 
--取得所有要遍历的数据
FOR(SELECT Account,Password,TelNumber,IMEI FROM A) 
OPEN testcursor;
--抓取一条数据
FETCH NEXT FROM testcursor INTO @Account,@Password,@TelNumber,@IMEI;
--在游标内数据量为0时跳出循环
WHILE @@FETCH_STATUS=0 
BEGIN 
--判断表B中是否存在当前游标内A表的Account数据
IF NOT EXISTS(SELECT Account FROM B WHERE Account IN(@Account)) 
--如果不存在,则插入这一条数据
INSERT INTO B 
(Account,Password,TelNumber,IMEI) 
VALUES(@Account,@Password,@TelNumber,@IMEI)
--抓取下一条游标数据 
FETCH NEXT FROM testcursor INTO @Account,@Password,@TelNumber,@IMEI 
END; 
--在本阶段所有数据遍历插入完毕后,延迟一分钟
WAITFOR DELAY '00:01:00' 
--关闭当前游标
CLOSE testcursor;
DEALLOCATE testcursor;
--进入下一次循环
END; 


 

猜你喜欢

转载自blog.csdn.net/huobaopaopao/article/details/70848596