在SQL备份名称中输入日期

时间:2019-05-07 07:31:55

标签: tsql

我正在创建一个脚本,它将按照我告诉它的顺序备份所有数据库,但是我希望备份名称为“ DATABASENAME_TodaysDate.bak”。 我试过使用此T-SQL:

BACKUP DATABASE [DATABASENAME] TO  DISK = N'D:\Backups\DatabaseName_getdate()_.bak'

然后我意识到这是行不通的,因为GETDATE()位于撇号内。

2 个答案:

答案 0 :(得分:0)

您可以使用以下命令将GETDATE()函数移至撇号之外。函数CONCAT()。示例:

BACKUP DATABASE [DATABASENAME] TO DISK = CONCAT('D:\Backups\DatabaseName_', GETDATE(), '_.bak');

答案 1 :(得分:0)

我们的操作方式如下:

        SELECT @DateString = CAST(DATEPART(YEAR, GETDATE()) AS CHAR(4))
                           + RIGHT('0' + CAST(DATEPART(MONTH, GETDATE()) AS VARCHAR(2)), 2)
                           + RIGHT('0' + CAST(DATEPART(DAY, GETDATE()) AS VARCHAR(2)), 2);
        SELECT @TimeString = RIGHT('0' + CAST(DATEPART(HOUR, GETDATE()) AS VARCHAR(2)), 2)
                           + RIGHT('0' + CAST(DATEPART(MINUTE, GETDATE()) AS VARCHAR(2)), 2);
        SELECT @SQL = 'BACKUP DATABASE [' + @Database + ']'
                    + ' TO DISK = ''' + @BackupDir + '\' + @Database + '_' + @BackupType 
                    + '_' + @DateString + '_'+ @TimeString + @BackupFileSuffix + ''''
                    + ' WITH INIT';

        -- Backup Database
        BEGIN TRY
            EXEC (@SQL);
        END TRY
        BEGIN CATCH
            --do something usefull here like sending an email
        END CATCH

我知道这很丑。但这对我们有用

编辑:因为我们的解决方案很丑,所以这里有些“不是那么丑”

declare @sql varchar (400) = concat('BACKUP DATABASE [DATABASENAME] TO DISK = ''D:\Backups\DatabaseName_', format(GETDATE(), 'yyyy-MM-dd_HHmmss'), '_.bak''');
select @sql