首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何正确使用sp_msforeachDB创建和删除备份

如何正确使用sp_msforeachDB创建和删除备份
EN

Stack Overflow用户
提问于 2019-05-24 00:09:58
回答 1查看 389关注 0票数 0

我正在设置一种在内部环境中创建和删除备份的新方法。服务器上的空间是一个大问题,所以我真的必须找到一种方法来进行备份,并在程序上为每个数据库删除较旧的数据库。

我想到了使用sp_MSforeachdb并简单地做一个备份的想法。如果成功,它将删除前一天完成的较旧备份。(我们每晚做一次备份)。

代码语言:javascript
复制
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“。在一秒之内,这没有任何意义。

EN

回答 1

Stack Overflow用户

发布于 2019-05-24 03:36:41

我刚刚看到了我的错误,这只是由于连字符没有正确放置而导致的。代码如下:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56279203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档