尝试使用日期文件名设置SQL Server备份时出错



我使用以下脚本进行正常备份:

USE SysproCompanyT
GO
EXEC('BACKUP DATABASE [Company] TO  DISK = N''G:SQLBackupsINSTANCE1MonthEndBackupCompanyMonthEndBackup.bak'' WITH NOFORMAT, COPY_ONLY,INIT,
NAME = N''MonthEndBackup'', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
')
PRINT 'Backup of Syspro Company started'
GO
PRINT 'Backup of Syspro Company complete'

这是可行的,但我试图写一个脚本,它会给我一个文件名作为日期,并尝试了以下操作:

DECLARE @TimeDate Varchar(256);
SET @TimeDate = REPLACE(CONVERT(Varchar(256),GETDATE(), 126), ':','');
DECLARE @location VARCHAR(200) = '\AAVM-SQL01SQLBackups$INSTANCE1MonthEndBackupCompany' + @TimeDate + '.bak'
BACKUP DATABASE [Company]
TO DISK = @location
WITH NOFORMAT, INIT, NAME= Company, SKIP, NOREWIND, NOUNLOAD, STATS=10

不幸的是,我没有得到备份,如果我在语句末尾添加GO,我会得到一个错误

SQL Server本机客户端10:尝试创建备份时必须声明标量变量

有人有什么想法吗?

谢谢。

Domdew

DISK的值必须是字符串文字。如果要传递动态值,则需要使用动态SQL。

DECLARE @TimeDate Varchar(256),
@SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) + NCHAR(10);
SET @TimeDate = REPLACE(CONVERT(Varchar(256),GETDATE(), 126), ':','');
DECLARE @location VARCHAR(200) = '\AAVM-SQL01SQLBackups$INSTANCE1MonthEndBackupCompany' + @TimeDate + '.bak'
SET @SQL = N'BACKUP DATABASE [Company]' + @CRLF +
N'TO DISK = N''' + REPLACE(@location, '''','''''') + N'''' + @CRLF + --Replace is there incase the path ever changes, and it might have a single quote (') in it.
N'WITH NOFORMAT, INIT, NAME= Company, SKIP, NOREWIND, NOUNLOAD, STATS=10';
EXEC sp_executesql @SQL;

相关内容

最新更新