首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程对存储在链接服务器上的数据文件进行备份

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

Stack Overflow用户
提问于 2015-06-23 18:33:35
回答 1查看 258关注 0票数 0

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

代码语言:javascript
复制
SET @Sql='BACKUP DATABASE  [' + @datafileID  + '] TO DISK = ''' + @fullPath + ''' WITH INIT, COMPRESSION;'
EXEC (@Sql) AT [@ServerName]

@datafileID是数据文件名。

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

@ServerName具有链接服务器名。

当运行存储过程时,我得到以下错误:

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

链接服务器是在代码前面创建的。

代码语言:javascript
复制
IF NOT EXISTS(SELECT * FROM sys.servers where name = @ServerName  )
SET @Sql = 'sp_addlinkedserver @server = '' ' + @ServerName + ''''
EXECUTE( @SQL)

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

EN

回答 1

Stack Overflow用户

发布于 2020-02-27 08:25:33

将该@Sql变量与另一个存储Exec AT命令的变量复合如下:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31010786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档