这是工作中为了偷懒而准备的, Sql Server MSSQL批量备份数据库.TSQL开箱即用, 非常好!
--- 备份数据库TSQL-批量 ---
DECLARE @CurrentDate VARCHAR(8);
DECLARE @DatabaseName NVARCHAR(128);
DECLARE @BackupPath NVARCHAR(500);
DECLARE @SQLCommand NVARCHAR(1000);
-- 获取当前日期,格式为YYYYMMDD
SET @CurrentDate = CONVERT(VARCHAR(8), GETDATE(), 112);
-- 定义需要备份的数据库列表
DECLARE @DatabaseList TABLE (
DatabaseName NVARCHAR(128),
IsProcessed BIT DEFAULT 0
);
-- 在这里添加需要备份的数据库名称
INSERT INTO @DatabaseList (DatabaseName)
VALUES
('AIS20241230182025'),
('Database2'),
('Database3');
-- 可以继续添加更多数据库
-- 循环处理每个数据库
WHILE EXISTS(SELECT 1 FROM @DatabaseList WHERE IsProcessed = 0)
BEGIN
-- 获取下一个未处理的数据库
SELECT TOP 1 @DatabaseName = DatabaseName
FROM @DatabaseList
WHERE IsProcessed = 0;
-- 构建备份文件路径(可写)
SET @BackupPath = 'D:\full_bak\' + @DatabaseName + '_' + @CurrentDate + '_Full.bak';
-- 构建动态SQL命令
SET @SQLCommand =
'BACKUP DATABASE [' + @DatabaseName + ']
TO DISK = ''' + @BackupPath + '''
WITH INIT, STATS = 10;';
-- 执行动态SQL
BEGIN TRY
PRINT '正在备份数据库: ' + @DatabaseName;
PRINT '备份路径: ' + @BackupPath;
EXEC sp_executesql @SQLCommand;
PRINT '数据库 ' + @DatabaseName + ' 备份完成';
END TRY
BEGIN CATCH
PRINT '数据库 ' + @DatabaseName + ' 备份失败: ' + ERROR_MESSAGE();
END CATCH
-- 标记为已处理
UPDATE @DatabaseList
SET IsProcessed = 1
WHERE DatabaseName = @DatabaseName;
PRINT '----------------------------------------';
END
PRINT '所有数据库备份任务已完成';
GO本文为宁若水!原创文章,转载无需和我联系,但请注明来自[若水]博客 www.lalaya.net
