大家都知道,Ms Sql 有自动备份的功能,但如果由于某种原因不能自动备份,或者我们想手动备份的话,就可以用下边的sql语句来执行备份。
--------------------代码开始-------------
USE [master]
------删除旧数据-------------------------------------------------------------
DECLARE @delTime VARCHAR(100)
SET @delTime = CONVERT(VARCHAR(100), GETDATE(), 126) -----当前时间
EXECUTE MASTER.dbo.xp_delete_file 0,‘D:\DataBak‘,‘bak‘,@delTime,1
DECLARE @FILENAME VARCHAR(500)
DECLARE @DATABakPath VARCHAR(500)
DECLARE @DATABaseName VARCHAR(500)
DECLARE @DATAFullName VARCHAR(500)
SET @DATABakPath = ‘D:\DataBak\‘
DECLARE @temp TABLE(a INT, b INT, c INT)
DECLARE @exeText VARCHAR(100)
SET @FILENAME = REPLACE(
REPLACE(
REPLACE(CONVERT(VARCHAR, GETDATE(), 120), ‘-‘, ‘‘),
‘ ‘,
‘‘
),
‘:‘,
‘‘
) + ‘.bak‘
------------遍历所有用户数据库 进行备份-------------------------------------------------------------------
DECLARE My_Cursor CURSOR --定义游标
FOR
(
SELECT NAME
FROM sys.databases
WHERE NAME NOT IN (‘master‘, ‘msdb‘, ‘tempdb‘, ‘model‘,
‘ReportServerTempDB‘, ‘ReportServer‘)
) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @DATABaseName; --读取第一行数据
WHILE @@FETCH_STATUS = 0
BEGIN
SET @DATAFullName = @DATABakPath + @DATABaseName
SET @exeText = ‘mkdir ‘ + @DATAFullName --创建备份目录
EXEC xp_cmdshell @exeText,
no_output
SET @DATAFullName = @DATAFullName + ‘\‘ + @FILENAME + ‘‘
BACKUP DATABASE @DATABaseName TO DISK = @DATAFullName
FETCH NEXT FROM My_Cursor INTO @DATABaseName; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
PRINT ‘-----------备份完成---------------------‘ + CONVERT(VARCHAR(100), GETDATE(), 126)+ ‘---------------‘
--------------------代码结束-------------
版权声明:本文为博主原创文章,未经博主允许不得转载。