如何获取备份的SQL Server数据库名以生成独立备份文件?
解决多SQL Server数据库备份文件名重复覆盖问题
你的问题核心是原代码中Backup-SqlDatabase的BackupFile参数为固定值,所有选中的数据库都会写入同一个文件导致覆盖。要给每个数据库生成带自身名称的备份文件,需要遍历每个选中的数据库对象,单独生成备份路径:
修改后的代码
# 确保备份目录存在,不存在则创建 New-Item -Path C:\Backup -ItemType Directory -Force | Out-Null # 生成统一时间戳 $date = Get-Date -format "yyyyMMdd_hhmmssfff" # 选择数据库并逐个备份 Get-SqlDatabase -ServerInstance localhost | Out-GridView -PassThru | ForEach-Object { # 生成包含数据库名和时间戳的备份路径 $backupFile = "C:\Backup\$($_.Name)_Backup_$date.bak" # 执行备份 Backup-SqlDatabase -ServerInstance localhost -Database $_.Name -BackupFile $backupFile }
关键说明
- 使用
ForEach-Object遍历每个选中的数据库对象,实现单独处理 - 通过
$($_.Name)获取当前数据库的名称,嵌入到文件名中(PowerShell字符串中访问对象属性需要用子表达式$()语法) - 每个数据库生成的文件名格式为
[数据库名]_Backup_[时间戳].bak,彻底避免文件覆盖 - 开头的
New-Item命令确保备份目录存在,防止因目录不存在导致备份失败
可选调整
- 可以修改文件名格式,比如将时间戳放在前面:
"C:\Backup\$date_$($_.Name)_Backup.bak" - 如果使用命名SQL Server实例,将
localhost替换为实例名或服务器名\实例名
内容的提问来源于stack exchange,提问作者Geri Reshef
相关产品推荐
相关产品推荐

