我正在创建一个脚本,它将按照我告诉它的顺序备份所有数据库,但是我希望备份名称为“ DATABASENAME_TodaysDate.bak”。 我试过使用此T-SQL:
BACKUP DATABASE [DATABASENAME] TO DISK = N'D:\Backups\DatabaseName_getdate()_.bak'
然后我意识到这是行不通的,因为GETDATE()
位于撇号内。
答案 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