You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写恢复含数据库名+当日日期备份文件的SQL脚本?

恢复带日期命名的SQL Server备份文件

嘿,我看你需要恢复那种「数据库名称_日.月.年.bak」格式的备份文件(比如test_01.05.2018.bak),你给的原脚本在日期拼接上有点问题,没法生成符合要求的格式,我帮你调整一下:

首先是适配SQL Server 2012及以上版本的脚本,用FORMAT函数能更简洁地生成日期格式:

DECLARE @BackupFile AS nvarchar(128);
-- 生成匹配「数据库名称_日.月.年.bak」的备份文件路径
-- 这里默认恢复前一天的备份,若要恢复当日备份,把DATEADD(day, -1, GETDATE())改成GETDATE()即可
SET @BackupFile = N'C:\backup\test_' 
    + FORMAT(DATEADD(day, -1, GETDATE()), 'dd.MM.yyyy') 
    + N'.bak';

USE master;
RESTORE DATABASE [TEST] 
FROM DISK = @BackupFile
WITH 
    FILE = 1, -- 指定备份集中的第一个备份文件
    MOVE N'test1' TO N'C:\db\TEST.mdf', -- 移动数据文件到目标路径
    MOVE N'test1_log' TO N'C:\db\TEST_log.ldf', -- 移动日志文件到目标路径
    NOUNLOAD, -- 不卸载备份介质
    REPLACE, -- 覆盖已存在的同名数据库(执行前请确认!)
    STATS = 10; -- 每完成10%进度输出状态信息

如果你的SQL Server版本低于2012(不支持FORMAT函数),可以用CONVERT和字符串拼接来实现相同效果:

DECLARE @BackupFile AS nvarchar(128);
SET @BackupFile = N'C:\backup\test_' 
    -- 补零确保日、月是两位数字
    + RIGHT('0' + CAST(DAY(DATEADD(day, -1, GETDATE())) AS VARCHAR(2)), 2) + '.'
    + RIGHT('0' + CAST(MONTH(DATEADD(day, -1, GETDATE())) AS VARCHAR(2)), 2) + '.'
    + CAST(YEAR(DATEADD(day, -1, GETDATE())) AS VARCHAR(4))
    + N'.bak';

USE master;
RESTORE DATABASE [TEST] 
FROM DISK = @BackupFile
WITH 
    FILE = 1,
    MOVE N'test1' TO N'C:\db\TEST.mdf',
    MOVE N'test1_log' TO N'C:\db\TEST_log.ldf',
    NOUNLOAD, 
    REPLACE, 
    STATS = 10;

几点注意事项:

  • 如果你不需要恢复前一天的备份,直接把所有DATEADD(day, -1, GETDATE())替换成GETDATE()就行。
  • REPLACE参数会直接覆盖已存在的同名数据库,执行前一定要确认目标数据库可以被覆盖!
  • 确保SQL Server服务账号有备份目录和目标数据目录的读写权限,否则会报错。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:22:41