我正在设置一种在内部环境中创建和删除备份的新方法。服务器上的空间是一个大问题,所以我真的必须找到一种方法来进行备份,并在程序上为每个数据库删除较旧的数据库。
我想到了使用sp_MSforeachdb并简单地做一个备份的想法。如果成功,它将删除前一天完成的较旧备份。(我们每晚做一次备份)。
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
会给我展示一些东西,但结果是空的。当我运行它时,它简单地写下"Commands completed successfully“。在一秒之内,这没有任何意义。
发布于 2019-05-24 03:36:41
我刚刚看到了我的错误,这只是由于连字符没有正确放置而导致的。代码如下:
If exists(Select * from #TempDBName where DBNAME = @DBOPurpose)
BEGIN
DECLARE @ERROR bit
DECLARE @command nvarchar(Max)
SET @Error = 0
SET @command = '
DECLARE @DBO VARCHAR(15)
Set @DBO = ''%'+@DBOPURPOSE+'%''
If Exists (Select *
from sys.databases
where name like ''%?''
and name like ''%''+@DBO+''%'')
BEGIN TRY
PRINT ''?''
EXECUTE master.dbo.xp_create_Subdir '''+@Drive+':\SQLBACKUP\TEST\?''
BACKUP DATABASE [?] TO DISK = '''+@Drive+':\SQLBackup\'+@DBOPurpose+'_' +(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 TRY
BEGIN CATCH
Insert into BackupExecLog(ErrorDate, ErrorNumber, ErrorMessage)
Select Getdate(),
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage
Set @Error = 1
END CATCH'
Select @Command
--EXEC sys.sp_MSforeachdb @command
https://stackoverflow.com/questions/56279203
复制相似问题