如何备份指定数据库?解决Bat+SQL脚本误备份全库问题
解决仅备份指定数据库Salto_Test的问题
先帮你定位核心问题:你当前用的sqlcmd命令参数搞错了,导致没有正确执行你写的SQL备份脚本,这才意外备份了服务器上所有数据库。下面一步步帮你修正:
1. 修正Bat脚本的命令参数
你现在用的-Q参数是用来直接执行引号内的SQL语句文本的,不是用来指定要运行的外部SQL脚本文件的。要执行本地的SQL脚本,得用-i参数。
修正后的Bat命令如下:
sqlcmd -S HEIST-BERG-SL\SQLEXPRESS -E -i "C:\SALTO\Automatic Backups\scripts\backupDB.sql" PAUSE
简单解释下参数:
-S:指定要连接的SQL Server实例-E:用Windows身份验证登录数据库-i:指定要执行的SQL脚本文件路径PAUSE:执行完后暂停窗口,方便你查看执行结果
2. 确认你的SQL备份脚本有效性
你提供的SQL脚本本身是没问题的,它明确指定了备份Salto_Test数据库,还自动生成带时间戳的备份文件名。如果需要,你可以加个小优化:比如用WITH INIT参数让新备份覆盖同名旧文件,或者用WITH NOINIT追加到现有备份文件里,根据你的需求调整就行。
优化后的SQL脚本示例(覆盖同名备份):
declare @datstr as varchar(100)='' declare @currdate as datetime=getdate() set @datstr=cast(DATEPART(YYYY,@currDate) as varchar(5)) +right('00'+cast(DATEPART(MM,@currDate)as varchar(5)),2) +right('00'+cast(DATEPART(DD,@currDate)as varchar(5)),2) +right('00'+cast(DATEPART(HH,@currDate)as varchar(5)),2) +right('00'+cast(DATEPART(MINUTE,@currDate) as varchar(5)),2) declare @path as varchar(500)='C:\SALTO\Automatic Backups\Salto_Test_db_' + @datstr +'.BAK' backup database Salto_Test to disk= @path WITH INIT;
3. 测试验证
运行修正后的Bat脚本后,去C:\SALTO\Automatic Backups\目录下检查,应该只会生成Salto_Test数据库的备份文件,不会再出现其他库的备份了。如果执行时报错,看看Bat窗口的输出提示,常见问题比如SQL Server服务账号没有目标目录的写入权限、数据库名称拼写错误之类的,针对性调整就行。
内容的提问来源于stack exchange,提问作者claeys




