2016-10-21 84 views
0

我正在尝试从链接服务器执行完全备份数据库备份以在另一个服务器SAN上将E驱动器。没有找到任何帮助。链接的服务器SAPRS02工作并更改了RPC选项,但仍然不起作用。用于链接服务器访问的SQL Server 2008 R2 T-SQL备份脚本

任何帮助表示赞赏。

JJ

DECLARE @DateStr nvarchar(500), @ArchivePath nvarchar(500), 
     @FileName nvarchar(500), @DestFileName nvarchar(500), 
     @dbName nvarchar(255), @SvrName nvarchar(200), 
     @RADBACKUP nvarchar(MAX) 

SET @dbName = 'MYDB' 
SET @ArchivePath = 'E:\SQLBackups\MyDIR\' 
SET @SvrName = REPLACE(@@SERVERNAME,'\','-') 
SET @DateStr = CONVERT(NVARCHAR(20),GETDATE(),120) 
SET @DateStr = REPLACE(REPLACE(REPLACE(REPLACE(@DateStr,'',''),':',''),'-','_'),' ','') 
SET @FileName = @SvrName + '_' + @DBName + '_CopyOnly_backup_' + @DateStr + '.bak' 
SET @DestFileName = @ArchivePath + @FileName 


SET @RADBACKUP = 'BACKUP DATABASE @dbName 
TO DISK = @DestFileName 
WITH COMPRESSION 
COPY_ONLY, 
CHECKSUM, COMPRESSION, 
NAME = @FileName, SKIP, STATS = 10' 

--SELECT * FROM @RADBACKUP 

EXECUTE SAPRS02.master.dbo.sp_executesql @RADBACKUP 

ERROR是:

消息137,级别15,状态2,行1
必须声明标量变量 “@DbName”。

+0

消息137,级别15,状态2,行1 必须声明标量变量 “@DbName”。 – user5495350

+1

在@RADBACKUP中执行字符串时,那里没有任何变量的作用域。将它们连接为字符串或使用'sp_execute_sql'的参数功能。通过连接字符串,我的意思是这样做:'SET @RADBACKUP ='BACKUP DATABASE'+ @dbName +''+' –

回答

1
SET @RADBACKUP = 'BACKUP DATABASE ' + QUOTENAME(@dbName) + ' 
TO DISK = ''' + @DestFileName + ''' 
WITH COMPRESSION 
COPY_ONLY, 
CHECKSUM, COMPRESSION, 
NAME = ''' + @FileName + ''', SKIP, STATS = 10'; 
+0

现在我明白了。谢谢 – user5495350

+0

'Copy_Only'附近的Incorrec6语法。 – user5495350

+0

我只是想念一个逗号。现在,出于某种原因,它试图将备份放在H:驱动器上。我没有H驱动器。嗯。仍在研究。 – user5495350

相关问题