存储过程备份存储在链接服务器上的数据文件

时间:2015-06-23 18:33:36

标签: sql-server variables stored-procedures backup linked-server

我有一个存储过程,它将备份存储在同一个链接服务器上的链接服务器上的数据文件。从每个公司的表中检索链接的服务器名称。因此链接的服务器名称保存在变量中。 所以在我的存储过程中,我运行以下备份数据库命令:

SET @Sql='BACKUP DATABASE  [' + @datafileID  + '] TO DISK = ''' + @fullPath + ''' WITH INIT, COMPRESSION;'
EXEC (@Sql) AT [@ServerName]

@datafileID是数据文件名

@fullPath具有指向链接服务器上备份文件夹的路径

@ServerName具有链接服务器名称

运行存储过程时,出现以下错误:

  

无法找到服务器' @ ServerName'在sys.servers中。验证   指定了正确的服务器名称。如有必要,执行存储   过程sp_addlinkedserver将服务器添加到sys.servers。

链接服务器是在代码

中创建的
IF NOT EXISTS(SELECT * FROM sys.servers where name = @ServerName  )
SET @Sql = 'sp_addlinkedserver @server = '' ' + @ServerName + ''''
EXECUTE( @SQL)

如何在“备份数据库”命令中将服务器名称作为变量传递。

1 个答案:

答案 0 :(得分:0)

将该@Sql变量与另一个存储Exec AT的变量进行复合,如下所示:

declare @ServerName varchar(20), @Sql varchar(max),@datafileID varchar(100),@FullPath varchar(150), 
@cmd varchar(max)

set @ServerName = 'YourLinkedServerName'
set @datafileID = 'YourDatabaseName'
set @FullPath = 'YourFullPath\Backups.bak' 

SET @Sql='''BACKUP DATABASE  [' + @datafileID  + '] TO DISK = ''''' + @fullPath + ''''' With INIT, COMPRESSION;'''
set @cmd = 'EXEC (' + @Sql + ') AT [' + @ServerName + ']'

--print @cmd
-- will display: 
-- EXEC ('BACKUP DATABASE  [YourDatabaseName] TO DISK = ''YourFullPath\Backups.bak'' With INIT, COMPRESSION') AT [YourLinkedServerName]

exec (@cmd)