我正在设置一种在内部环境中创建和删除备份的新方法。服务器上的空间是一个大问题,所以我真的必须找到一种方法来进行备份并从程序上删除每个数据库的旧版本。
我想出了使用 sp_MSforeachdb 的想法并简单地进行备份。成功后,它将删除前一天完成的旧备份。(我们每晚进行 1 次备份)。
DECLARE @DBOPurpose Varchar(15)
DECLARE @Drive Varchar(1)
Set @DBOPurpose = 'Omnilabs'
DECLARE @command varchar(Max)
Select @command = '
If Exists (Select *
from sys.databases
where name like ''%?''
and name like ''%'+@DBOPurpose+'%'')
BEGIN
EXECUTE master.dbo.xp_create_Subdir '+@Drive+':\SQLBACKUP\'+@DBOPurpose+'
GO
BACKUP DATABASE [?] TO DISK = '+@Drive+':\SQLBackup\'+@DBOPurpose+'_Select Cast(Cast(Year(Getdate())As Varchar(150))+''_''+Cast(month(Getdate())As Varchar(150))+''_''+Cast (Day(Getdate()) As Varchar(150))+''_''+ cast(DATEPART(hour, GETDATE()) as varchar) + '''' + cast(DATEPART(minute, GETDATE()) as varchar)+ '''' + cast(DATEPART(Second, GETDATE()) as varchar)+ ''.bak'' As varchar(150))
END
Print N''TEST''
'
--Select @Command
EXEC sp_MSforeachdb @command
我期待做Select @Command
实际上会向我展示一些东西,但它是无效的。当我运行它时,它只是写“命令已成功完成”。一秒钟之内,这没有任何意义。